Info命令簡介
在使用Redis的過程中,可能會遇到很多問題,需要我們去診斷、去觀察Redis的健康情況。Redis給我們提供了的 info
命令,可以讓我們近距離的接觸它,觀察它各方面的信息、運行狀況。下面讓我們看看 info
命令都給我們帶來了哪些信息。
命令格式:INFO [section]
Info 指令顯示的信息分爲 9 大塊,每塊都有很多參數。我們也可以通過給定可選的參數 section ,可以讓命令只返回某一部分的信息。這 9 塊分別是:
server
部分記錄了 Redis 服務器的信息
clients
部分記錄了已連接客戶端的信息
memory
部分記錄了服務器的內存信息
persistence
部分記錄了跟 RDB 持久化和 AOF 持久化有關的信息
stats
部分記錄了一般統計信息
replication
部分記錄了主/從複製的相關信息
cpu
部分記錄了 CPU 的計算量統計信息
cluster
部分記錄了和集羣有關的信息
keyspace
部分記錄了數據庫相關的統計信息
不同版本的 Redis 可能對返回的一些域進行了增加或刪減。
因此,一個健壯的客戶端程序在對 INFO [section] 命令的輸出進行分析時,應該能夠跳過不認識的域,並且妥善地處理丟失不見的域。
Server
參數名稱 |
參數含義 |
redis_version |
Redis 的服務器版本 |
redis_git_sha1 |
Redis 的服務器版本 |
redis_git_dirty |
Git dirty flag |
redis_build_id |
|
redis_mode |
運行模式:單機(集羣) |
os |
Redis 服務器的宿主操作系統 |
arch_bits |
架構(32 或 64 位) |
multiplexing_api |
Redis 所使用的事件處理機制,如epoll |
gcc_version |
編譯 Redis 時所使用的 GCC 版本 |
process_id |
服務器進程的 PID |
run_id |
Redis 服務器的隨機標識符(用於 Sentinel 和集羣) |
tcp_port |
TCP/IP 監聽端口 |
uptime_in_seconds |
自 Redis 服務器啓動以來,經過的秒數 |
uptime_in_days |
自 Redis 服務器啓動以來,經過的天數 |
hz |
redis內部調度(進行關閉timeout的客戶端,刪除過期key等等)頻率,程序規定serverCron每秒運行10次。 |
lru_clock |
以分鐘爲單位進行自增的時鐘,用於 LRU 管理 |
executable |
啓動腳本路徑 |
config_file |
啓動時指定的配置文件(redis.conf)路徑 |
Clients
參數名稱 |
參數含義 |
connected_clients |
已連接客戶端的數量(不包括通過從屬服務器連接的客戶端) |
client_longest_output_list |
當前連接的客戶端當中,最長的輸出列表 |
client_longest_input_buf |
當前連接的客戶端當中,最大輸入緩存 |
blocked_clients |
正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客戶端的數量 |
Memory
參數名稱 |
參數含義 |
used_memory |
使用內存(B) |
used_memory_human |
人類可讀的格式的使用內存(MB) |
used_memory_rss |
操作系統角度,返回redis已分配的內存(即常駐內存),這個值和top、ps命令的輸出一致 |
used_memory_rss_human |
如上 |
used_memory_peak |
內存使用的峯值 |
used_memory_peak_human |
如上 |
total_system_memory |
整個系統內存 |
total_system_memory_human |
如上 |
used_memory_lua |
Lua腳本存儲佔用的內存 |
used_memory_lua_human |
如上 |
maxmemory |
Redis實例的最大內存配置 |
maxmemory_human |
如上 |
maxmemory_policy |
當達到maxmemory時的淘汰策略 |
mem_fragmentation_ratio |
used_memory_rss/used_memory的值。一般情況下,used_memory_rss略高於used_memory,當內存碎片較多時,則mem_fragmentation_ratio會較大,可以反映內存碎片是否很多 |
mem_allocator |
內存分配器。可以是libc 、 jemalloc 或者 tcmalloc |
在理想情況下, used_memory_rss
的值應該只比 used_memory
稍微高一點兒。
當 rss > used
,且兩者的值相差較大時,表示存在(內部或外部的)內存碎片。
內存碎片的比率可以通過 mem_fragmentation_ratio
的值看出。
當 used > rss
時,表示 Redis 的部分內存被操作系統換出到交換空間(swap)了,在這種情況下,操作可能會產生明顯的延遲,需要重點關注。即:mem_fragmentation_ratio小於1時
Persistence
參數名稱 |
參數含義 |
loading |
服務器是否正在載入持久化文件 |
rdb_changes_since_last_save |
離最近一次成功生成rdb文件,寫入命令的個數 |
rdb_bgsave_in_progress |
服務器是否正在創建rdb文件 |
rdb_last_save_time |
最近一次成功rdb文件的時間戳 |
rdb_last_bgsave_status |
最近一次成功rdb文件的狀態 |
rdb_last_bgsave_time_sec |
最近一次成功rdb文件的耗時 |
rdb_current_bgsave_time_sec |
若當前正在創建rdb文件,指當前的創建操作已經耗費的時間 |
aof_enabled |
aof是否開啓 |
aof_rewrite_in_progress |
aof的rewrite操作是否在進行中 |
aof_rewrite_scheduled |
rewrite任務計劃,當客戶端發送bgrewriteaof指令,如果當前rewrite子進程正在執行,那麼將客戶端請求的bgrewriteaof變爲計劃任務,待aof子進程結束後執行rewrite |
aof_last_rewrite_time_sec |
最近一次aof rewrite耗費時長 |
aof_current_rewrite_time_sec |
若當前正在執行aof rewrite,指當前的已經耗費的時間 |
aof_last_bgrewrite_status |
最近一次aof bgrewrite的狀態 |
aof_last_write_status |
最近一次aof寫入狀態 |
開啓 aof 後增加的一些info信息 |
|
aof_current_size |
aof文件當前大小 |
aof_base_size |
服務器啓動時或者最近一次AOF重寫後,文件的大小 |
aof_pending_rewrite |
同上面的aof_rewrite_scheduled |
aof_buffer_length |
aof 緩衝區的大小 |
aof_rewrite_buffer_length |
aof 重寫緩衝區的大小 |
aof_pending_bio_fsync |
後臺IO隊列中,等待fsync任務的個數 |
aof_delayed_fsync |
被延遲的 fsync 調用數量 |
Stats
參數名稱 |
參數含義 |
total_connections_received |
自啓動起連接過的總數。如果連接過多,說明短連接嚴重或連接池使用有問題,需調研代碼的連接設置 |
total_commands_processed |
自啓動起運行命令的總數 |
instantaneous_ops_per_sec |
每秒執行的命令數,相當於QPS |
total_net_input_bytes |
網絡入口流量字節數 |
total_net_output_bytes |
網絡出口流量字節數 |
instantaneous_input_kbps |
網絡入口kps |
instantaneous_output_kbps |
網絡出口kps |
rejected_connections |
拒絕的連接個數,由於maxclients限制,拒絕新連接的個數 |
sync_full |
主從完全同步成功次數 |
sync_partial_ok |
主從部分同步成功次數 |
sync_partial_err |
主從部分同步失敗次數 |
expired_keys |
自啓動起過期的key的總數 |
evicted_keys |
使用內存大於maxmemory後,淘汰的key的總數 |
keyspace_hits |
在main dictionary字典中成功查到的key個數 |
keyspace_misses |
同上,未命中的key的個數 |
pubsub_channels |
發佈/訂閱頻道數 |
pubsub_patterns |
發佈/訂閱模式數 |
latest_fork_usec |
上次的fork操作使用的時間(單位ms) |
migrate_cached_sockets |
是否已經緩存了到該地址的連接 |
slave_expires_tracked_keys |
從實例到期key數量 |
active_defrag_hits |
主動碎片整理命中次數 |
active_defrag_misses |
主動碎片整理未命中次數 |
active_defrag_key_hits |
主動碎片整理key命中次數 |
active_defrag_key_misses |
主動碎片整理key未命中次數 |
Replication
參數名稱 |
參數含義 |
role |
當前實例的角色master還是slave |
connected_slaves: |
slave的數量 |
master_replid |
主實例啓動隨機字符串 |
master_replid2 |
主實例啓動隨機字符串2 |
slave0 |
slave機器的信息、狀態 |
master_repl_offset |
主從同步偏移量,此值如果和上面的offset相同說明主從一致沒延遲,與master_replid可被用來標識主實例複製流中的位置。 |
second_repl_offset |
主從同步偏移量2,此值如果和上面的offset相同說明主從一致沒延遲 |
repl_backlog_active |
複製緩衝區是否開啓 |
repl_backlog_size |
複製緩衝區大小 |
repl_backlog_first_byte_offset |
複製緩衝區裏偏移量的大小 |
repl_backlog_histlen |
此值等於 master_repl_offset - repl_backlog_first_byte_offset,該值不會超過repl_backlog_size的大小 |
CPU
參數名稱 |
參數含義 |
used_cpu_sys |
Redis 服務器耗費的系統 CPU |
used_cpu_user |
Redis 服務器耗費的用戶 CPU |
used_cpu_sys_children |
後臺進程耗費的系統 CPU |
used_cpu_user_children |
後臺進程耗費的用戶 CPU |
Keyspace
參數名稱 |
參數含義 |
dbXXX:keys=XXX,expires=XXX |
各個數據庫(0-15)的 key 的數量,帶有生存期的 key 的數量,平均存活時間 |
代碼示例
# Server
redis_version:3.2.3 # Redis 的版本
redis_git_sha1:00000000 # Redis 的版本
redis_git_dirty:0
redis_build_id:9e93d0c7997bcfef
redis_mode:standalone # 運行模式:單機(集羣)
os:Linux 2.6.32-431.el6.x86_64 x86_64 # 操作系統
arch_bits:64 # 操作系統位數
multiplexing_api:epoll # redis所使用的事件處理機制
gcc_version:4.4.7 # gcc版本號
process_id:1606 # 當前 Redis 服務器進程id
run_id:17e79b1966f1f891eff203a8e496151ee8a3a7a7
tcp_port:7001 # 端口號
uptime_in_seconds:4360189 # 運行時間(秒)
uptime_in_days:50 # 運行時間(天)
hz:10 # redis內部調度(進行關閉timeout的客戶端,刪除過期key等等)頻率,程序規定serverCron每秒運行10次。
lru_clock:5070330 # Redis的邏輯時鐘
executable:/usr/local/bin/redis-server # 啓動腳本路徑
config_file:/opt/redis3/conf/redis_7001.conf # 啓動指定的配置文件路徑
# Clients
connected_clients:660 # 連接的客戶端數量
client_longest_output_list:0 # 當前連接的客戶端當中,最長的輸出列表
client_biggest_input_buf:0 # 當前連接的客戶端當中,最大輸入緩存
blocked_clients:0 # 阻塞的客戶端數量
# Memory
used_memory:945408832 # 使用內存(B)
used_memory_human:901.61M # 使用內存(MB)
used_memory_rss:1148919808 # 系統給redis分配的內存(即常駐內存),這個值和top命令的輸出一致
used_memory_rss_human:1.07G
used_memory_peak:1162079480 # 內存使用的峯值
used_memory_peak_human:1.08G
total_system_memory:6136483840 # 整個系統內存
total_system_memory_human:5.72G
used_memory_lua:122880 # Lua腳本存儲佔用的內存
used_memory_lua_human:120.00K
maxmemory:2147483648 # Redis實例的最大內存配置
maxmemory_human:2.00G
maxmemory_policy:allkeys-lru # 當達到maxmemory時的淘汰策略
mem_fragmentation_ratio:1.22 # used_memory_rss/used_memory的比例。一般情況下,used_memory_rss略高於used_memory,當內存碎片較多時,則mem_fragmentation_ratio會較大,可以反映內存碎片是否很多
mem_allocator:jemalloc-4.0.3 # 內存分配器
# Persistence
loading:0 # 服務器是否正在載入持久化文件
rdb_changes_since_last_save:82423954 # 離最近一次成功生成rdb文件,寫入命令的個數
rdb_bgsave_in_progress:0 # 服務器是否正在創建rdb文件
rdb_last_save_time:1560991229 # 最近一次成功rdb文件的時間戳
rdb_last_bgsave_status:ok # 最近一次成功rdb文件的狀態
rdb_last_bgsave_time_sec:-1 # 最近一次成功rdb文件的耗時
rdb_current_bgsave_time_sec:-1 # 若當前正在創建rdb文件,指當前的創建操作已經耗費的時間
aof_enabled:0 # aof是否開啓
aof_rewrite_in_progress:0 # aof的rewrite操作是否在進行中
aof_rewrite_scheduled:0 # rewrite任務計劃,當客戶端發送bgrewriteaof指令,如果當前rewrite子進程正在執行,那麼將客戶端請求的bgrewriteaof變爲計劃任務,待aof子進程結束後執行rewrite
aof_last_rewrite_time_sec:-1 # 最近一次aof rewrite耗費時長
aof_current_rewrite_time_sec:-1 # 若當前正在執行aof rewrite,指當前的已經耗費的時間
aof_last_bgrewrite_status:ok # 最近一次aof bgrewrite的狀態
aof_last_write_status:ok # 最近一次aof寫入狀態
# 開啓aof後增加的一些info信息
-----------------------------
aof_current_size:0 # aof當前大小
aof_base_size:0 # aof上次啓動或rewrite的大小
aof_pending_rewrite:0 # 同上面的aof_rewrite_scheduled
aof_buffer_length:0 # aof buffer的大小
aof_rewrite_buffer_length:0 # aof rewrite buffer的大小
aof_pending_bio_fsync:0 # 後臺IO隊列中等待fsync任務的個數
aof_delayed_fsync:0 # 延遲的fsync計數器
-----------------------------
# Stats
total_connections_received:15815 # 自啓動起連接過的總數。如果連接過多,說明短連接嚴重或連接池使用有問題,需調研代碼的連接設置
total_commands_processed:502953838 # 自啓動起運行命令的總數
instantaneous_ops_per_sec:7 # 每秒執行的命令數,相當於QPS
total_net_input_bytes:532510481889 # 網絡入口流量字節數
total_net_output_bytes:1571444057940 # 網絡出口流量字節數
instantaneous_input_kbps:0.37 # 網絡入口kps
instantaneous_output_kbps:0.59 # 網絡出口kps
rejected_connections:0 # 拒絕的連接個數,由於maxclients限制,拒絕新連接的個數
sync_full:1 # 主從完全同步成功次數
sync_partial_ok:0 # 主從部分同步成功次數
sync_partial_err:0 # 主從部分同步失敗次數
expired_keys:4404930 # 自啓動起過期的key的總數
evicted_keys:0 # 使用內存大於maxmemory後,淘汰的key的總數
keyspace_hits:337104556 # 在main dictionary字典中成功查到的key個數
keyspace_misses:22865229 # 同上,未命中的key的個數
pubsub_channels:1 # 發佈/訂閱頻道數
pubsub_patterns:0 # 發佈/訂閱模式數
latest_fork_usec:707 # 上次的fork操作使用的時間(單位ms)
migrate_cached_sockets:0 # 是否已經緩存了到該地址的連接
slave_expires_tracked_keys:0 # 從實例到期key數量
active_defrag_hits:0 # 主動碎片整理命中次數
active_defrag_misses:0 # 主動碎片整理未命中次數
active_defrag_key_hits:0 # 主動碎片整理key命中次數
active_defrag_key_misses:0 # 主動碎片整理key未命中次數
# Replication
role:master # 當前實例的角色master還是slave
connected_slaves:1 # slave的數量
master_replid:8f81c045a2cb00f16a7fc5c90a95e02127413bcc # 主實例啓動隨機字符串
master_replid2:0000000000000000000000000000000000000000 # 主實例啓動隨機字符串2
slave0:ip=172.17.12.251,port=7002,state=online,offset=506247209326,lag=1 # slave機器的信息、狀態
master_repl_offset:506247209478 # 主從同步偏移量,此值如果和上面的offset相同說明主從一致沒延遲,與master_replid可被用來標識主實例複製流中的位置。
second_repl_offset # 主從同步偏移量2,此值如果和上面的offset相同說明主從一致沒延遲
repl_backlog_active:1 # 複製緩衝區是否開啓
repl_backlog_size:157286400 # 複製緩衝區大小
repl_backlog_first_byte_offset:506089923079 # 複製緩衝區裏偏移量的大小
repl_backlog_histlen:157286400 # 此值等於 master_repl_offset - repl_backlog_first_byte_offset,該值不會超過repl_backlog_size的大小
# CPU
used_cpu_sys:6834.06 # 將所有redis主進程在覈心態所佔用的CPU時求和累計起來
used_cpu_user:8282.10 # 將所有redis主進程在用戶態所佔用的CPU時求和累計起來
used_cpu_sys_children:0.11 # 後臺進程的核心態cpu使用率
used_cpu_user_children:0.91 # 後臺進程的用戶態cpu使用率
# Cluster
cluster_enabled:0 # 實例是否啓用集羣模式
# Keyspace # 各個數據庫(0-15)的 key 的數量,帶有生存期的 key 的數量,平均存活時間
db0:keys=267906,expires=109608,avg_ttl=3426011859194
db1:keys=182,expires=179,avg_ttl=503527626
db8:keys=6,expires=0,avg_ttl=0
db15:keys=2,expires=0,avg_ttl=0