內存80%告警:
2017-03-13早上redis內存出現80%告警異常,處理步驟:
1、 客戶端用info memory 命令查看內存使用情況:
其中used_memory_human:2.5G,機器總內存4G
Swap區已經有15%左右的使用率,說明redis分配內存已經不夠用(used_memeroy>可用最大內存),操作系統開始進行內存與swap空間交換,把內存中舊的或不再使用的內容寫入硬盤上
1、 查看生產環境redis.conf文件的配置, 發現redis都是初始的默認配置(沒有專業的運維團隊支持 =。=!),經閱讀相關文檔,初定修改如下的一些默認配置:
1> timeout 300 //客戶端連接閑置300秒后,連接關閉
修改原因:原先是0,每次連接都會關閉,設置300后,不會頻繁的新建立連接,提升性能;
2> tcp-keepalive 60 //tcp 心跳包,官方建議配置60s,
修改原因: 可以檢測dead peers,保持連接可用;
3> logfile "/data/logs/redis/redis.log"
修改原因: 配置日志文件地址
4> stop-writes-on-bgsave-error no // 設置為yes:如果RDB快照激活,最近的寫操作保存失敗后,redis將會停止寫數據, 直到后台的寫程序正常運行
設置為no:如果硬盤有一些問題,redis也會正常運行,不會影響整個流程;
5> slave-read-only yes //從服務只讀 這個是默認的,可以不配置
6> repl-timeout 300 // repl-timeout 300 主從同步的超時時間
7> maxmemory 2g // 最大內存配置,如果達到最大值,將會按照內存回收的策略進行回收,如果設置了key的過期時間
# 最大內存策略:如果達到內存限制了,Redis如何選擇刪除key。你可以在下面五個行為里選:
# volatile-lru -> 根據LRU算法刪除帶有過期時間的key。
# allkeys-lru -> 根據LRU算法刪除任何key。
# volatile-random -> 根據過期設置來隨機刪除key, 具備過期時間的key。
# allkeys->random -> 無差別隨機刪, 任何一個key。
# volatile-ttl -> 根據最近過期時間來刪除(輔以TTL), 這是對於有過期時間的key
# noeviction -> 誰也不刪,直接在寫操作時返回錯誤。
8> maxmemory-policy volatile-ttl //key失效策略,過期時間
9> client-output-buffer-limit slave 1024mb 256mb 0 //客戶端的輸出緩沖區限制,表示:輸出緩沖區達到1024mb或者客戶端達到256m時,客戶端立即斷開
以上就是內存異常后,做的一些redis配置的修改。
此外,還擴展了redis的內存,從原先的4g擴展到8g,目前運行穩定,緩存數據保持在2.5-3g之間。
