Redis性能分析思路

Redis性能分析有幾個大的方向。分別是

(1)基準對比

(2)配置優化

(3)數據持久化

(4)鍵值優化

(5)緩存淘汰

(6)Redis集羣

基準對比

 

        在沒有業務實例運行的情況下,在服務器上通過測試Redis 實例的基準性能來對比有實例運行情況下的redis性能。通過以下步驟來判斷Redis實例是否變慢:

 

1.爲避免業務服務器到 Redis 服務器之間的網絡延遲,可以直接在 Redis 服務器測試實例的延遲

redis-cli -h 127.0.0.1 -p 6379 --intrinsic-latency 60

 

 

2.測試時間段內Redis的最小、最大和平均時延

 

redis-cli -h 127.0.0.1 -p 6379 --latency-history -i 1

 

 

3.對比實例運行的redis延遲

 

        1Gb/s的網絡的延遲差不多是200us,如果指令的響應延遲明顯大於200us,可能是請求隊列過多導致。此時total_commands_processed增長會很快

 

        如果是個別指令很慢導致的延遲增加,那麼可以看到total_commands_processed下降或者不變,而Redis性能卻在明顯下降

 

        如果實例的延遲時間是Redis基準性能時間的1.5-2倍以上,可以認爲這個Redis實例性能比較差

 

配置優化

 

linux配置優化

 

vm.overcommit_memory

Redis是內存數據庫,優先使用內存。設置overcommit 爲1是爲了讓 fork 在低內存下也可以執行成功。

0 內存不足時需要檢查

1 允許超量使用內存

2 內存使用不能超過swap+50%,50%是overcommit-ration默認值

 

禁用thp

Linux支持大內存頁(2MB)分配,默認開啓。開啓時可以降低 fork 子進程的速度,但 fork 操作之後,每個內存頁從原來 4KB 變爲 2MB,會大幅增加內存消耗,同時拖慢寫操作時間,產生大量寫操作慢查詢。因此 Redis 日誌中需要禁用此特性

 

echo never > /sys/kernel/mm/transparent_hugepage/enabled

 

 

Redis配置優化

daemonize no

Redis 默認不是以守護進程的方式運行,可以通過該配置項修改,使用 yes 啓用守護進程

 

timeout 300

當客戶端閒置多長秒後關閉連接,如果指定爲 0 ,表示關閉該功能

 

loglevel notice

指定日誌記錄級別,Redis 總共支持四個級別:debug、verbose、notice、warning,默認爲 notice

 

logfile stdout

日誌記錄方式,默認爲標準輸出,如果配置 Redis 爲守護進程方式運行,而這裏又配置爲日誌記錄方式爲標準輸出,則日誌將會發送給 /dev/null

 

databases 16

設置數據庫的數量,默認數據庫爲0,可以使用SELECT 命令在連接上指定數據庫id

 

#RDB   持久化

save 900 1                         #在900秒(15分鐘)之後,如果至少有1個key發生變化,則dump內存快照。

save 300 10                        #在300秒(5分鐘)之後,如果至少有10個key發生變化,則dump內存快照。

save 60 10000                      #在60秒(1分鐘)之後,如果至少有10000個key發生變化,則dump內存快照。

 

#AOF持久化配置

appendonly yes                     #開啓AOF持久化,默認爲no

appendfilename "appendonly.aof"    #指定更新日誌文件名

appendfsync always                 #每次有數據修改發生時都會寫入AOF文件

#appendfsync everysec              #每秒鐘同步一次,該策略爲AOF的缺省策略

#appendfsync no                    #從不同步。高效但是數據不會被持久化

 

rdbcompression yes

指定存儲至本地數據庫時是否壓縮數據,默認爲 yes,Redis 採用 LZF 壓縮。如果爲了節省 CPU 時間,可以關閉該選項,但會導致數據庫文件變的巨大

 

dbfilename dump.rdb

指定本地數據庫文件名,默認值爲 dump.rdb

 

requirepass foobared

Redis 連接密碼,如果配置了連接密碼,客戶端在連接 Redis 時需要通過 AUTH <password> 命令提供密碼,默認關閉

 

maxclients 128

設置同一時間最大客戶端連接數,默認無限制。Redis 可以同時打開的客戶端連接數爲 Redis 進程可以打開的最大文件描述符數,如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis 會關閉新的連接並向客戶端返回 max number of clients reached 錯誤信息

 

maxmemory <bytes>

指定 Redis 最大內存限制,Redis 在啓動時會把數據加載到內存中。達到最大內存後,Redis 會先嚐試清除已到期或即將到期的 Key,當此方法處理後,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀操作。

 

 

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

list-max-ziplist-entries 512

list-max-ziplist-value 64

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

指定在hash或者list超過一定的數量或者某一臨界值時,採用特殊的算法

 

tcp-backlog

超過最大連接數時,由backlog持有

 

slowlog-log-slower-than xxxms

執行時間慢於xxx毫秒的命令計入Slow Log

slowlog-max-len xxx

#Slow Log的長度,即最大紀錄多少條Slow Log

 

 

訂閱查看更多內容

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章