項目里有10台服務器都在一個刀箱里,其中一台是redis緩存服務器,另外的是app服務器。通過監控發現這個刀箱的流量750M,其中緩存服務器的流量達105M,這么高的流量已經造成其它項目的服務器網絡延時,丟包,已經影響了正常的業務。通過分析基本可以斷定流量產生來自於app服務器對redis服務器數據調用,至於為什么為產生大流量,需要進一步分析,redis的monitor命令可以實時打印出 redis 服務器接收到的命令,我們就通過這些數據進行分析。
1、抓取幾分鍾的數據,然后手動終止命令(我取了7分鍾,70多萬行數據):
redis-cli monitor >19-2.txt
wc -l 19-2.txt
784565 19-2.txt
2、取關鍵字GET的進行分析,統計key的get次數:
awk '/GET/{a[$3]++}END{for(i in a)print i"\t"a[i]}' 19-2.txt |sort -k2nr|more
3、通過type命令查看發現排名第1的key類型是string類型,將value get出來保存到一個文件,du一下發現竟然有1.6M。在7分鍾之內get了17000多次,折算下來平均每秒鍾產生約70M的流量,再加上其它key的讀寫產生的流量應該有100M左右,和監控到的流量差不多,最后查到這個key是上周上線后才有的。將情況告訴開發,變更存儲方式,更改代碼連夜上線,問題解決。