861
技術社區[雲棲]
Redis開發運維實踐問題處理隻內存檢查
8.3.1 係統內存查看
script/下的memstat.sh或者ps_mem.py都可以查看係統的內存情況,兩個工具都需要root權限。
8.3.2 係統swap內存查看
#!/bin/bash # Get current swap usage for all running processes # Erik Ljungstrom 27/05/2011 # Modified by Mikko Rantalainen 2012-08-09 # Pipe the output to "sort -nk3" to get sorted output # Modified by Marc Methot 2014-09-18 # removed the need for sudo SUM=0 OVERALL=0 for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"` do PID=`echo $DIR | cut -d / -f 3` PROGNAME=`ps -p $PID -o comm --no-headers` for SWAP in `grep VmSwap $DIR/status 2>/dev/null | awk '{ print $2 }'` do let SUM=$SUM+$SWAP done if (( $SUM > 0 )); then echo "PID=$PID swapped $SUM KB ($PROGNAME)" fi let OVERALL=$OVERALL+$SUM SUM=0 done echo "Overall swap used: $OVERALL KB"
8.3.3 info查看內存
數據結構的空間 實占空間 前2者的比例,1.N為佳,如果此值過大,說明redis的內存的碎片化嚴重,可以導出再導入一次.
8.3.4 dump.rdb文件成生內存報告(rdb-tool)
# rdb -c memory ./dump.rdb > redis_memory_report.csv # sort -t, -k4nr redis_memory_report.csv
8.3.5 query在線分析
8.3.6 內存抽樣分析
8.3.7 統計生產上比較大的key
對redis中的key進行采樣,尋找較大的keys。是用的是scan方式,不用擔心會阻塞redis很長時間不能處理其他的請求。執行的結果可以用於分析redis的內存的隻用狀態,每種類型key的平均大小。
8.3.8 查看key內部結構和編碼等信息
查看一個key內部信息,比如refcount、encoding、serializedlength等,結果如下 Value at:0x7f21b9479850 refcount:1 encoding:raw serializedlength:6 lru:8462202 lru_seconds_idle:215
8.3.9 Rss增加,內存碎片增加
此時可以選擇時間進行redis服務器的重新啟動,並且注意在rss突然降低觀察是否swap被使用,以確定並非是因為swap而導致的rss降低。
一個典型的例子是:https://grokbase.com/t/gg/redis-db/14ag5n9qhv/redis-memory-fragmentation-ratio-reached-5000
最後更新:2017-05-08 11:31:08