Redis的TPS過低的優化方法html
問題檢查
- 內存檢查,看看是否存在內存不足使用SWAP的狀況
- 單核CPU和總體CPU的使用狀況檢查,看看CPU負荷是否高居不下
- 檢查磁盤IO和網絡IO的狀況
- 檢查網絡延遲是否正常,網絡必定要好
- 用redis的
info commandstats
命令查看命令執行分佈和事件,看看是否大量存在hgetall、smembers等時間複雜的高的命令
- 用redis的
info stats
命令統計TPS
- 用redis的
slowlog get
命令查看慢查詢的命令,進行鍼對性優化
- 檢查客戶端列表,檢查鏈接時間和內存消耗omem的客戶端
redis-cli -p 6379 -h xxxx –a xxxx client list | grep -v 「omem=0」
- bigkey檢查,bigkey對性能影響比較大
redis-cli -p 6379 -h xxxx –a xxxx –-bigkeys
- 如使用lua腳本,看看lua腳本中是否存在大量的計數
服務器內核參數調整
- 設置overcommit爲1
echo 1 > /proc/sys/vm/overcommit_memory
cat /proc/sys/vm/overcommit_memory
- 關閉THP
cho never > /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled
- 設置TCP backlog
echo 511 > /proc/sys/net/core/somaxconn
cat /proc/sys/net/core/somaxcon
redis配置調整
- 設置maxmemory, 若開啓快照功能,maxmemory設置成物理內存的45%,若不開啓則設置爲95%
- 綁定本機網卡,bind x.x.x.x
- 設置客戶端超時時間timeout和tcp-keepalive,防止無用鏈接佔用資源
- 檢查持久化策略,rdb和aof只使用一種或都不使用(主庫關閉,從庫開啓)
如使用rdb策略,則save的頻率不要過高,而且能夠關閉rdbcompression 和 rdbchecksum
如使用aof策略,則appendfsync不要設置爲always,能夠調整一下aof文件重寫配置auto-aof-rewrite-percentage和auto-aof-rewrite-min-size
關於持久化的優化方法可參考:深刻Redis持久化
- 數據的編碼優化,根據內存的狀況可調整數據的編碼以提高性能,參考:.Redis的內存優化
代碼中的優化
- 查看業務邏輯,是否可以使用管道模式(Piplline),使用管道對性能你的提高很是大
- 可否使用lua腳本
- 換一個性能好的客戶端,如Lettuce,參考:Lettuce和Jedis的基準測試