info指令使用總結(屬性名,屬性值,屬性描述)
Redis的常用指令有哪些,每個指令可以顯示哪些資訊?
Redis所有的值都是以 field:value 的形式展示。
子產品名 子產品含義
Server 伺服器資訊
Clients 用戶端資訊
Memory 記憶體資訊
Persistence 持久化資訊
Stats 全局統計資訊(緩存命中率)
Replication 複制資訊
CPU CPU消耗資訊
Commandstats 指令統計資訊
Cluster 叢集資訊
Keyspace 資料庫鍵統計資訊
expired_keys:0 # 運作以來過期的 key 的數量
evicted_keys:0 # 運作以來删除過的key的數量
role:master # 目前執行個體的角色master還是slave
keyspace_hits:0 # 命中 key 的次數
keyspace_misses:0 # 未命中次數
keyspace_hits/(keyspace_hits+keyspace_misses)就是緩存命中率。視情況而定,建議0.9以上,即緩存命中率要超過90%。如果緩存命中率過低,那麼要排查對緩存的用法是否有問題!
一、info Server
包含了Redis服務本身的一些資訊,例如版本号、運作模式、作業系統的版本、TCP端口等。
redis-test:0>info server
"# Server
redis_version:5.0.6
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:c15635ea8e16946a
redis_mode:standalone
os:Linux 2.6.32-504.23.4.el6.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:sync-builtin
gcc_version:4.4.7
process_id:576150
run_id:c90380b6bc2814e8018a94d9a2b4e44be80faf79
tcp_port:50346
uptime_in_seconds:1023294
uptime_in_days:11
hz:10
configured_hz:10
lru_clock:12611922
executable:/opt/soft/redis50/bin/redis-server
config_file:/work/redis50346/redis50346.conf
"
1,redis_mode 運作模式,redis運作模式分為:Cluster.Sentinel.Standalone;
2,tcp_port 監聽的端口 6379;
3,uptime_in_seconds和uptime_in_days 自Redis服務啟動以來,運作的秒數和天數;
4,config_file Redis的配置檔案的位置;
二、info Clients
info Clients子產品的統計資訊,包含了連接配接數、阻塞指令連接配接數、輸入輸出緩沖區等相關統計資訊。
如何檢視目前的連接配接資訊或者說有多少連接配接?
Redis>info clients
{
"client_recent_max_output_buffer": 0,
"blocked_clients": 0,
"connected_clients": 51,
"client_recent_max_input_buffer": 2
}
1,連接配接數:和連接配接池的配置有關系,不包括來自副本的連接配接;
2,阻塞用戶端連接配接數:blocked_clients,一般是執行了list資料類型的BLPOP或者BRPOP指令引起的,這個值最好應該為0。
3,CLIENT 常用指令
CLIENT LIST 擷取用戶端清單; name字段表示目前連接配接的名稱。
CLIENT SETNAME 設定目前連接配接點redis的名稱;
CLIENT GETNAME 檢視目前連接配接的名稱;
CLIENT KILL ip:port 殺死指定連接配接;
三、info Memory
info Memory子產品的統計資訊,包含了Redis記憶體使用、系統記憶體使用、碎片率、記憶體配置設定器等相關統計資訊。
Redis>info Memory
{
"mem_clients_normal": 1789214,
"rss_overhead_ratio": 0.2,
"used_memory_peak_human": "1.04G",
"maxmemory_human": "2.00G",
"used_memory_dataset_perc": "2.68%",
"mem_not_counted_for_evict": 1320,
"used_memory_peak_perc": "99.66%",
"allocator_frag_ratio": 1.0,
"used_memory_lua_human": "37.00K",
"used_memory": 1113726728,
"used_memory_scripts": 0,
"maxmemory": 2147483648,
"used_memory_scripts_human": "0B",
"total_system_memory_human": "251.89G",
"allocator_rss_ratio": 1.01,
"allocator_frag_bytes": 633000,
"number_of_cached_scripts": 0,
"mem_replication_backlog": 1073741824,
"lazyfree_pending_objects": 0,
"allocator_rss_bytes": 10297344,
"mem_aof_buffer": 1320,
"rss_overhead_bytes": -897171456,
"allocator_allocated": 1113782104,
"mem_clients_slaves": 49694,
"maxmemory_policy": "volatile-lru",
"used_memory_startup": 791456,
"used_memory_human": "1.04G",
"active_defrag_running": 0,
"used_memory_dataset": 29816508,
"allocator_active": 1114415104,
"used_memory_lua": 37888,
"used_memory_overhead": 1083910220,
"total_system_memory": 270467923968,
"mem_allocator": "jemalloc-5.1.0",
"mem_fragmentation_bytes": -886164808,
"used_memory_peak": 1117551160,
"allocator_resident": 1124712448,
"used_memory_rss": 227540992,
"mem_fragmentation_ratio": 0.2,
"used_memory_rss_human": "217.00M"
}
1,maxmemory 和 maxmemory_human 最大記憶體2G;
2,maxmemory_policy 記憶體淘汰政策;
3,mem_fragmentation_ratio 記憶體碎片率. used_memory_rss_human / used_memory_human
4,如何計算記憶體碎片率?
5, mem_fragmentation_ratio:1.02 記憶體碎片率大于1意味着什麼?
理想情況下,used_memory_rss值應僅略高于used_memory。 當rss >> used 時,差異很大意味着存在記憶體碎片 (internal or external),可以通過檢查mem_fragmentation_ratio來評估。
6,已經使用的記憶體是哪個名額?
四、info Persistence [pəˈsɪstəns] 持久化
info Persistence子產品的統計資訊,包含了RDB和AOF兩種持久化的一些統計資訊。
redis-test:0>info Persistence
"# Persistence
loading:0
rdb_changes_since_last_save:1213741
rdb_bgsave_in_progress:0
rdb_last_save_time:1622201389
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:278528
aof_enabled:1
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
aof_current_size:167953757
aof_base_size:0
aof_pending_rewrite:0
aof_buffer_length:0
aof_rewrite_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0
"
五、info Stats
info Stats子產品的統計資訊,是Redis的基礎統計資訊,包含了:連接配接、指令、網絡、過期、同步等很多統計資訊
1,拒絕連接配接數(rejected_connections)也需要關注,這個值理想狀态是0。如果大于0,說明建立的連接配接數超過了maxclients,需要排查原因。是redis連接配接池配置不合理還是連接配接這個redis執行個體的服務過多等。
Redis>info Stats
{
"active_defrag_key_hits": 0,
"rejected_connections": 0,
"pubsub_patterns": 0,
"expired_time_cap_reached_count": 0,
"sync_partial_ok": 0,
"migrate_cached_sockets": 0,
"keyspace_misses": 144363,
"total_net_output_bytes": 47355923253,
"active_defrag_hits": 0,
"slave_expires_tracked_keys": 0,
"expired_stale_perc": 0.0,
"instantaneous_ops_per_sec": 6011,
"total_commands_processed": 373073062,
"latest_fork_usec": 269,
"total_connections_received": 24517,
"sync_full": 1,
"active_defrag_misses": 0,
"pubsub_channels": 1,
"expired_keys": 0,
"active_defrag_key_misses": 0,
"total_net_input_bytes": 11914643391,
"evicted_keys": 0,
"instantaneous_input_kbps": 186.43,
"instantaneous_output_kbps": 737.4,
"sync_partial_err": 1,
"keyspace_hits": 249967588
}
1,如何計算緩存命中率?
六、info Replication
info Replication子產品的統計資訊,包含了Redis主從複制的一些統計資訊,根據主從節點,統計資訊也略有不同
redis-test:0>info Replication
"# Replication
role:master
connected_slaves:1
slave0:ip=10.166.254.236,port=50346,state=online,offset=389738337,lag=0
master_replid:a4df37f43f87291a91a87a3ebc99bbdb9841f77c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:389738337
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:134217728
repl_backlog_first_byte_offset:255520610
repl_backlog_histlen:134217728
"
七、info CPU
info CPU子產品的統計資訊,包含了Redis程序和子程序對于CPU消耗的一些統計資訊。
redis-test:0>info CPU
"# CPU
used_cpu_sys:203.586050
used_cpu_user:407.154103
used_cpu_sys_children:0.000000
used_cpu_user_children:0.000000
"
八、info Commandstats
info Commandstats子產品的統計資訊,是Redis指令統計資訊,包含各個指令的指令名、總次數、總耗時、平均耗時。(執行過哪些指令?指令執行的時常)
1,調用次數(calls)
2,這些指令消耗的總CPU時間(usec)
3,每個指令執行所消耗的平均CPU時間(usec_per_call)
redis-test:0>info Commandstats
"# Commandstats
cmdstat_client:calls=390,usec=11789,usec_per_call=30.23
cmdstat_type:calls=78,usec=174,usec_per_call=2.23
cmdstat_ttl:calls=75,usec=88,usec_per_call=1.17
cmdstat_scan:calls=1261,usec=5642591,usec_per_call=4474.70
cmdstat_slowlog:calls=17905,usec=116448,usec_per_call=6.50
cmdstat_select:calls=232,usec=136,usec_per_call=0.59
cmdstat_publish:calls=1511708,usec=4376704,usec_per_call=2.90
cmdstat_exists:calls=599638,usec=455262,usec_per_call=0.76
cmdstat_get:calls=4664,usec=10175,usec_per_call=2.18
cmdstat_auth:calls=24512,usec=37469,usec_per_call=1.53
cmdstat_keys:calls=1,usec=3939,usec_per_call=3939.00
cmdstat_config:calls=1478,usec=70899,usec_per_call=47.97
cmdstat_ping:calls=3091664,usec=1093731,usec_per_call=0.35
cmdstat_replconf:calls=1025063,usec=598074,usec_per_call=0.58
cmdstat_del:calls=620681,usec=560526,usec_per_call=0.90
cmdstat_subscribe:calls=3,usec=8,usec_per_call=2.67
cmdstat_memory:calls=24,usec=244,usec_per_call=10.17
cmdstat_info:calls=352140,usec=16445560,usec_per_call=46.70
cmdstat_psync:calls=1,usec=461,usec_per_call=461.00
cmdstat_set:calls=713137,usec=1082454,usec_per_call=1.52
"
九、info Cluster
info Cluster子產品的統計資訊,目前隻有一個統計資訊,辨別目前Redis是否為Cluster模式。
redis-test:0>info cluster
"# Cluster
cluster_enabled:0
"
十、info Keyspace
info Keyspace子產品的統計資訊,包含了每個資料庫的鍵值統計資訊。
redis-test:0>info Keyspace
"# Keyspace
db0:keys=147186,expires=0,avg_ttl=0
"
1,redis鍵空間的狀态監控
1)鍵個數(keys): redis執行個體包含的鍵個數。建議控制在1kw内;單執行個體鍵個數過大,可能導緻過期鍵的回收不及時。統計目前節點key的數量(多少個緩存資料)。
2)設定有生存時間的鍵個數:(keys_expires): 是純緩存或業務的過期長,都建議對鍵設定TTL; 避免業務的死鍵問題. (expires字段)
3)估算設定生存時間鍵的平均壽命: (avg_ttl): redis會抽樣估算執行個體中設定TTL鍵的平均時長,機關毫秒。如果無TTL鍵或在Slave則avg_ttl一直為0
2,info中keyspace顯示的key的數量與dbsize顯示的數量不同?
因為redis是一個叢集,存在很多節點,keyspace顯示的是一個節點的key的數量,而dbsize顯示的是所有結點的key的數量。圖中redis使用了三個節點,dbsize差不多正好是keyspace的3倍。
十一、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。
十三、慢日志
通過指令slowlog get得到Redis執行的slowlog集合,理想情況下,slowlog集合應該為空,即沒有任何慢日志,不過,有時候由于網絡波動等原因造成set key value這種指令執行也需要幾毫秒,在監控的時候我們需要注意,而不能看到slowlog就想着去優化,簡單的set/get可能也會出現在slowlog中。
https://blog.csdn.net/pbymw8iwm/article/details/111714329