20210609 redis中info命令使用

Posted 陈如水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
"

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

以上是关于20210609 redis中info命令使用的主要内容,如果未能解决你的问题,请参考以下文章

20210609 redis中info命令使用

死磕 Redis----- info 命令详解

死磕 Redis----- info 命令详解

Redis info命令详解

Redis 使用指南:深度解析 info 命令

redis info 命令详解