redis問題診斷:info指令

在使用 Redis 時,時常會遇到不少問題須要診斷,在診斷以前須要瞭解 Redis 的運行狀態,經過強大的 Info 指令,你能夠清晰地知道 Redis 內部一系列運行參數。redis

Info 指令顯示的信息很是繁多,分爲 9 大塊,每一個塊都有很是多的參數,這 9 個塊分別是:服務器

  1. Server 服務器運行的環境參數
  2. Clients 客戶端相關信息
  3. Memory 服務器運行內存統計數據
  4. Persistence 持久化信息
  5. Stats 通用統計數據
  6. Replication 主從複製相關信息
  7. CPU CPU 使用狀況
  8. Cluster 集羣信息
  9. KeySpace 鍵值對統計數量信息

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
...

Redis 每秒執行多少次指令?

這個信息在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" "*"

Redis 鏈接了多少客戶端?

這個信息在 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

Redis 內存佔用多大 ?

這個信息在 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變量的次數來決定是否須要擴大積壓緩衝區,它表示主從半同步複製失敗的次數。

相關文章
相關標籤/搜索