閱讀861 返回首頁    go 技術社區[雲棲]


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

  上一篇:go Redis開發運維實踐測試方法
  下一篇:go Redis開發運維實踐問題處理隻延遲檢查