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 >
