最近略忙,好久沒有更新博客了,已長草,今天來除下草,好了,不廢話了,開始!
現在很多web服務都會用到 memcached ,如何知道你的 memcached 是否正常工作,命中率如何呢,本文簡單介紹一下:
首先你需要知道 memcached 服務所在的ip 和端口號,這個一般會寫在web服務的環境變量里面,當然也可以寫在代碼里面,不過這樣更容易曝光,讓memcached 服務受到攻擊。
1、telnet ip 端口號 連上MC
2、輸入 stats 查看MC狀態
OK, 你就拿到了目前MC的狀態,那么各個變量是什么意思呢?我們應該重點關注哪些量呢?
3、各個變量的含義:
STAT pid 22362 //memcache服務器的進程ID
STAT uptime 1469315 //服務器已經運行的秒數
STAT time 1339671194 //服務器當前的unix時間戳
STAT version 1.4.9 //memcache版本
STAT libevent 1.4.9-stable //libevent版本
STAT pointer_size 64 //當前操作系統的指針大小(32位系統一般是32bit,64就是64位操作系統)
STAT rusage_user 3695.485200 //進程的累計用戶時間
STAT rusage_system 14751.273465 //進程的累計系統時間
STAT curr_connections 69 //服務器當前存儲的items數量
STAT total_connections 855430 //從服務器啟動以后存儲的items總數量
STAT connection_structures 74 //服務器分配的連接構造數
STAT reserved_fds 20 //
STAT cmd_get 328806688 //get命令(獲取)總請求次數
STAT cmd_set 75441133 //set命令(保存)總請求次數
STAT cmd_flush 34 //flush命令請求次數
STAT cmd_touch 0 //touch命令請求次數
STAT get_hits 253547177 //總命中次數
STAT get_misses 75259511 //總未命中次數
STAT delete_misses 4 //delete命令未命中次數
STAT delete_hits 565730 //delete命令命中次數
STAT incr_misses 0 //incr命令未命中次數
STAT incr_hits 0 //incr命令命中次數
STAT decr_misses 0 //decr命令未命中次數
STAT decr_hits 0 //decr命令命中次數
STAT cas_misses 0 //cas命令未命中次數
STAT cas_hits 0 //cas命令命中次數
STAT cas_badval 0 //使用擦拭次數
STAT touch_hits 0 //touch命令未命中次數
STAT touch_misses 0 //touch命令命中次數
STAT auth_cmds 0 //認證命令處理的次數
STAT auth_errors 0 //認證失敗數目
STAT bytes_read 545701515844 //總讀取字節數(請求字節數)
STAT bytes_written 1649639749866 //總發送字節數(結果字節數)
STAT limit_maxbytes 2147483648 //分配給memcache的內存大小(字節)
STAT accepting_conns 1 //服務器是否達到過最大連接(0/1)
STAT listen_disabled_num 0 //失效的監聽數
STAT threads 4 //當前線程數
STAT conn_yields 14 //連接操作主動放棄數目
STAT hash_power_level 16 //
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT expired_unfetched 30705763
STAT evicted_unfetched 0
STAT bytes 61380700 //當前存儲占用的字節數
STAT curr_items 28786 //當前存儲的數據總數
STAT total_items 75441133 //啟動以來存儲的數據總數
STAT evictions 0 //為獲取空閑內存而刪除的items數(分配給memcache的空間用滿后需要刪除舊的items來得到空間分配給新的items)
STAT reclaimed 39957976 //已過期的數據條目來存儲新數據的數目
4、應該重點關注的變量:
筆者認為,使用memcache應該主要關注如下變量(已經在上面標紅)
cmd_get get請求總次數
get_hits get請求命中總次數
get_misses get請求失敗總次數
這三個量可以算出MC的命中率get_hits / cmd_get 或者 get_hits / (get_hits+get_misses) ,這個是使用MC服務最重要的一個量,命中率越高越好。
另外,需要關注:
limit_maxbytes 為MC分配的內存大小
curr_items 當前存儲的條目數量
bytes 當前服務使用的MC內存
顯然,這兩個量標識了,你當前還有多少內存空間富余,也非常重要,當這兩個量接近時,可以及時給MC擴容,根據筆者的經驗,MC分配的空間不是全部能用的,實際能用的大約是分配空間的 90% 左右,為什么?筆者沒有看過memcache的源碼,猜測是因為 memcached 本身的key value的索引也是需要耗費一定的內存的,等讀了源碼再來跟新。
好了,並沒有讀源碼,不過看了幾篇關於memcached的介紹,回頭重新寫一篇博文吧。。。這里簡單說下,簡單可以理解為MC的存儲分配是按照分片來划分的,而每片按照一定的比例增長,如果一片存儲區域不能存下當前的value,那么需要換一片更大的存儲空間,就會產生一定的存儲資源浪費。
evictions 為獲取空閑內存而刪除的items數
這個量顯然也灰常重要,能看出來有多少items因為空間不足被擠出了MC
好了,就醬!