天天看點

20210609 redis中info指令使用

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
"
           
20210609 redis中info指令使用

五、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
}
           
20210609 redis中info指令使用

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
"
           
20210609 redis中info指令使用

七、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
"
           
20210609 redis中info指令使用

八、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
"
           
20210609 redis中info指令使用

九、info Cluster

info Cluster子產品的統計資訊,目前隻有一個統計資訊,辨別目前Redis是否為Cluster模式。

redis-test:0>info cluster
"# Cluster
cluster_enabled:0
"
           
20210609 redis中info指令使用

十、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

繼續閱讀