very theoretical % used bytes.

'bytes' is the total size of items known to the cache, limit_maxbytes is
actually the limit for the number of 1MB slabs that can be related. They
happen to closely but not exactly relate.

In memcached, all object expirey is passive. 'bytes' will decrement if you
'get' an expired item, or if you expressly delete it, but if the object
expires nothing will actively kick down the value. So 'bytes' might give
you a shallow idea of what your slab overhead is once the cache is full,
but not much else.

Trond had an idea for some new per-slab stats to help show memory waste
more clearly, but due to the O(1) expire algorithm there's no way to
really "know" how full memcached is. You judge that by hitrate, eviction
rate (per slab if you want), and how old recently expired objects are via
the per-slab evicted_time stat.

-Dormando

On Wed, 29 Apr 2009, Nicholas Tang wrote:

> I know.  :)
>
> What I'm trying to figure out is what the bytes/limit_maxbytes ratio
> shows me - theoretical % used bytes if there was no wastage from
> excess space allocation for each chunk?
>
> Thanks,
> Nicholas
>
> On 4/29/09, Dustin <[email protected]> wrote:
> >
> >
> >  Slabs are fixed size.  If you have a 1 byte object to store, by
> > default, it's going to use 80 bytes of memory.
> >
> > On Apr 29, 3:54 pm, ntang <[email protected]> wrote:
> >> Ok, I've got a question on slabs vs. main stats...
> >>
> >> So here's one of my servers:
> >>
> >> [r...@cc12-5 ~]# telnet 10.50.9.90 11213
> >> Trying 10.50.9.90...
> >> Connected to cc90-9.web.nap.ccops.us (10.50.9.90).
> >> Escape character is '^]'.
> >> stats
> >> STAT pid 24458
> >> STAT uptime 694639
> >> STAT time 1241044888
> >> STAT version 1.2.8
> >> STAT pointer_size 64
> >> STAT rusage_user 63.251384
> >> STAT rusage_system 146.914665
> >> STAT curr_items 754674
> >> STAT total_items 2309096
> >> STAT bytes 1860697442
> >> STAT curr_connections 1044
> >> STAT total_connections 846349
> >> STAT connection_structures 1772
> >> STAT cmd_flush 0
> >> STAT cmd_get 6623750
> >> STAT cmd_set 2309076
> >> STAT get_hits 4234984
> >> STAT get_misses 2388766
> >> STAT evictions 53109
> >> STAT bytes_read 4224402099
> >> STAT bytes_written 4002657189
> >> STAT limit_maxbytes 2097152000
> >> STAT threads 2
> >> STAT accepting_conns 1
> >> STAT listen_disabled_num 0
> >> END
> >> ^]
> >> telnet> quit
> >> Connection closed.
> >>
> >> If you compare bytes and limit_maxbytes, it looks like this memcached
> >> instance is 88.7% used.
> >>
> >> But I wrote a quick script to grab the per-slab stats:
> >>
> >> SERVER: 10.50.9.90:11213
> >> SLAB    SIZE    #/page  #PAGES  #CHUNKS AVAIL   ASPACE  %USED
> >> 1       104     10082   15      151230  0       0       100.0%
> >> 2       136     7710    2       15420   0       0       100.0%
> >> 3       176     5957    6       35742   1       176     100.0%
> >> 4       224     4681    2       9362    4       896     100.0%
> >> 5       280     3744    1       3744    237     66360   93.7%
> >> 6       352     2978    48      142944  4       1408    100.0%
> >> 7       440     2383    23      54809   0       0       100.0%
> >> 8       552     1899    54      102546  1       552     100.0%
> >> 9       696     1506    18      27108   2       1392    100.0%
> >> 10      872     1202    46      55292   1       872     100.0%
> >> 11      1096    956     23      21988   0       0       100.0%
> >> 12      1376    762     20      15240   1       1376    100.0%
> >> 13      1720    609     62      37758   3       5160    100.0%
> >> 14      2152    487     14      6818    0       0       100.0%
> >> 15      2696    388     34      13192   0       0       100.0%
> >> 16      3376    310     18      5580    1       3376    100.0%
> >> 17      4224    248     3       744     59      249216  92.1%
> >> 18      5280    198     3       594     114     601920  80.8%
> >> 19      6600    158     2       316     35      231000  88.9%
> >> 20      8256    127     27      3429    0       0       100.0%
> >> 21      10320   101     59      5959    1       10320   100.0%
> >> 22      12904   81      145     11745   0       0       100.0%
> >> 23      16136   64      80      5120    2       32272   100.0%
> >> 24      20176   51      30      1530    0       0       100.0%
> >> 25      25224   41      16      656     0       0       100.0%
> >> 26      31536   33      19      627     0       0       100.0%
> >> 27      39424   26      240     6240    0       0       100.0%
> >> 28      49280   21      831     17451   0       0       100.0%
> >> 29      61600   17      20      340     0       0       100.0%
> >> 30      77000   13      30      390     0       0       100.0%
> >> 31      96256   10      56      560     0       0       100.0%
> >> 32      120320  8       84      672     0       0       100.0%
> >> 33      150400  6       1       6       5       752000  16.7%
> >> TOTALS:                         755152  471     1958296 99.9%
> >>
> >> As you can see, it's a slightly different story.  To see if it would
> >> make a difference, I tried to figure out what the available space from
> >> those 480 chunks would be, and compared that to the limit_maxbytes,
> >> and it still seemed to come out around that same 99.9% level of
> >> utilization.
> >>
> >> So is that 99.9% the accurate number I should be using for
> >> utilization?  (Or more accurately, should I calculate 1.) the total
> >> size based on the total of (# chunks * size) for each slab,  and
> >> compare it to 2.) the total available space based on the total of
> >> ( avail chunks * size) for each slab?)
> >>
> >> And if that's accurate, is the rest of the space lost to the slab
> >> allocation and overhead?
> >>
> >> Now I'm debating if I should update memcache-top to report on actual
> >> available space based on the slab stats, since that's a very different
> >> number from the available space according to bytes vs.
> >> limit_maxbytes... :)
> >>
> >> Thanks,
> >> Nicholas
>
> --
> Sent from my mobile device
>

Reply via email to