在使用 Redis 時,時常會遇到不少問題須要診斷,在診斷以前須要瞭解 Redis 的運行狀態,經過強大的 Info 指令,你能夠清晰地知道 Redis 內部一系列運行參數。redis
Info 指令顯示的信息很是繁多,分爲 9 大塊,每一個塊都有很是多的參數,這 9 個塊分別是:服務器
Info 能夠一次性獲取全部的信息,也能夠按塊取信息。詳情能夠參考redis官方文檔網絡
# 獲取全部信息 > info # Server ... # Clients ... # Memory ... # Persistence ... # Stats ... # Replication ... # CPU ... # Cluster ... # Keyspace ... # 獲取內存相關信息 > info memory # Memory used_memory:889376 used_memory_human:868.53K used_memory_rss:4083712 ... # 獲取複製相關信息 > info replication # Replication role:master connected_slaves:0 master_replid:0e4b9992edc630942127f4f3707dd9fb9064a7e0 ...
這個信息在stats塊中,能夠使用info status
查看。lua
> info stats # Stats total_connections_received:8 total_commands_processed:29 # ops_per_sec: operations per second,也就是每秒操做數 instantaneous_ops_per_sec:10 #表示由於超出最大鏈接數限制而被拒絕的客戶端鏈接次數, #若是這個數字很大,意味着服務器的最大鏈接數設置的太低須要調整 maxclients 參數。 rejected_connections:0 #如下內容省略 ...
若是想實時監測redis運行了哪些命令,能夠使用monitor命令spa
> monitor OK
在另外一個客戶端中運行keys *
,能夠看到如下信息:操作系統
> monitor OK 1539355497.644954 [0 127.0.0.1:51082] "keys" "*"
這個信息在 Clients 塊裏,能夠經過 info clients
看到。code
> info clients # Clients connected_clients:124 # 這個就是正在鏈接的客戶端數量 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0
若是想知道客戶端連接來源,能夠使用client list
查看。內存
> client list id=7 addr=127.0.0.1:50938 fd=9 name= age=4515 idle=305 flags=O db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=monitor id=9 addr=127.0.0.1:51082 fd=8 name= age=4176 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client id=10 addr=127.0.0.1:51086 fd=10 name= age=4148 idle=3893 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=info
這個信息在 Memory 塊裏,能夠經過 info memory 看到。資源
> info memory used_memory_human:827.46K # 內存分配器 (jemalloc) 從操做系統分配的內存總量 used_memory_rss_human:3.61M # 操做系統看到的內存佔用 ,top 命令看到的內存 used_memory_peak_human:829.41K # Redis 內存消耗的峯值 used_memory_lua_human:37.00K # lua 腳本引擎佔用的內存大小 ...
這個信息在 Replication 塊裏,能夠經過 info replication 看到。文檔
> info replication repl_backlog_active:0 repl_backlog_size:1048576 # 這個就是積壓緩衝區大小 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 ...
複製積壓緩衝區大小很是重要,它嚴重影響到主從複製的效率。當從庫由於網絡緣由臨時斷開了主庫的複製,而後網絡恢復了,又從新連上的時候,這段斷開的時間內發生在 master 上的修改操做指令都會放在積壓緩衝區中,這樣從庫能夠經過積壓緩衝區恢復中斷的主從同步過程。
積壓緩衝區是環形的,後來的指令會覆蓋掉前面的內容。若是從庫斷開的時間過長,或者緩衝區的大小設置的過小,都會致使從庫沒法快速恢復中斷的主從同步過程,由於中間的修改指令被覆蓋掉了。這時候從庫就會進行全量同步模式,很是耗費 CPU 和網絡資源。
若是有多個從庫複製,積壓緩衝區是共享的,它不會由於從庫過多而線性增加。若是實例的修改指令請求很頻繁,那就把積壓緩衝區調大一些,幾十個 M 大小差很少了,若是很閒,那就設置爲幾個 M。
> redis-cli info stats | grep sync sync_full:0 sync_partial_ok:0 sync_partial_err:0 # 半同步失敗次數
經過查看sync_partial_err變量的次數來決定是否須要擴大積壓緩衝區,它表示主從半同步複製失敗的次數。