Redis幾個重要的健康指標
存活情況
所有指標中最重要的當然是檢查redis是否還活著,可以通過命令PING的響應是否是PONG來判斷。
連接數
連接的客戶端數量,可通過命令src/redis-cli info Clients | grep connected_clients得到,這個值跟使用redis的服務的連接池配置關係比較大,所以在監控這個欄位的值時需要注意。另外這個值也不能太大,建議不要超過5000,如果太大可能是redis處理太慢,那麼需要排除問題找出原因。
另外還有一個拒絕連接數(rejected_connections)也需要關注,這個值理想狀態是0。如果大於0,說明創建的連接數超過了maxclients,需要排查原因。是redis連接池配置不合理還是連接這個redis實例的服務過多等。
阻塞客戶端數量
blocked_clients,一般是執行了list數據類型的BLPOP或者BRPOP命令引起的,可通過命令src/redis-cli info Clients | grep blocked_clients得到,很明顯,這個值最好應該為0。
使用內存峰值
監控redis使用內存的峰值,我們都知道Redis可以通過命令config set maxmemory 10737418240設置允許使用的最大內存(強烈建議不要超過20G),為了防止發生swap導致Redis性能驟降,甚至由於使用內存超標導致被系統kill,建議used_memory_peak的值與maxmemory的值有個安全區間,例如1G,那麼used_memory_peak的值不能超過9663676416(9G)。另外,我們還可以監控maxmemory不能少於多少G,比如5G。因為我們以前生產環境出過這樣的問題,運維不小心把10G配置成了1G,從而導致伺服器有足夠內存卻不能使用的悲劇。
內存碎片率
mem_fragmentation_ratio=used_memory_rss/used_memory,這也是一個非常需要關心的指標。如果是redis4.0之前的版本,這個問題除了重啟也沒什麼很好的優化辦法。而redis4.0有一個主要特性就是優化內存碎片率問題(Memory de-fragmentation)。在redis.conf配置文件中有介紹即ACTIVE DEFRAGMENTATION:碎片整理允許Redis壓縮內存空間,從而回收內存。這個特性默認是關閉的,可以通過命令CONFIG SET activedefrag yes熱啟動這個特性。
- 當這個值大於1時,表示分配的內存超過實際使用的內存,數值越大,碎片率越嚴重。
- 當這個值小於1時,表示發生了swap,即可用內存不夠。
另外需要注意的是,當內存使用量(used_memory)很小的時候,這個值參考價值不大。所以,建議used_memory至少1G以上才考慮對內存碎片率進行監控。
緩存命中率
keyspace_misses/keyspace_hits這兩個指標用來統計緩存的命令率,keyspace_misses指未命中次數,keyspace_hits表示命中次數。keyspace_hits/(keyspace_hits+keyspace_misses)就是緩存命中率。視情況而定,建議0.9以上,即緩存命中率要超過90%。如果緩存命中率過低,那麼要排查對緩存的用法是否有問題!
OPS
instantaneous_ops_per_sec這個指標表示緩存的OPS,如果業務比較平穩,那麼這個值也不會波動很大,不過國內的業務比較特性,如果不是全球化的產品,夜間是基本上沒有什麼訪問量的,所以這個欄位的監控要結合自己的具體業務,不同時間段波動範圍可能有所不同。
持久化
rdb_last_bgsave_status/aof_last_bgrewrite_status,即最近一次或者說最後一次RDB/AOF持久化是否有問題,這兩個值都應該是"ok"。
另外,由於redis持久化時會fork子進程,且fork是一個完全阻塞的過程,所以可以監控fork耗時即latest_fork_usec,單位是微妙,如果這個值比較大會影響業務,甚至出現timeout。
失效KEY
如果把Redis當緩存使用,那麼建議所有的key都設置了expire屬性,通過命令src/redis-cli info Keyspace得到每個db中key的數量和設置了expire屬性的key的屬性,且expires需要等於keys:
# Keyspace
db0:keys=30,expires=30,avg_ttl=0
db0:keys=23,expires=22,avg_ttl=0
慢日誌
通過命令slowlog get得到Redis執行的slowlog集合,理想情況下,slowlog集合應該為空,即沒有任何慢日誌,不過,有時候由於網路波動等原因造成set key value這種命令執行也需要幾毫秒,在監控的時候我們需要注意,而不能看到slowlog就想著去優化,簡單的set/get可能也會出現在slowlog中。
作者:阿飛的博客
原文:http://developer.51cto.com/art/201901/591107.htm


※Scrapy 入門教程
※Flutter 通過API獲取網路數據並解析
TAG:程序員小新人學習 |