【Redis】做Redis监控必须要了解的INFO命令

一、初识INFO

1.1.INFO命令简介

​ 根据官网,可总结为一句话:INFO命令以一种易于理解和阅读的格式,返回关于Redis服务器的各种信息和统计数值。INFO命令的格式为:INFO [section],通过给定可选的参数 section ,可以让命令只返回某一部分的信息:
server:有关Redis服务器的常规信息
clients:客户端连接部分
memory:内存消耗相关信息
persistence:RDB和AOF相关信息
stats:常规统计
replication:主/副本复制信息
cpu:CPU消耗统计信息
commandstats:Redis命令统计
cluster:Redis群集部分
keyspace:与数据库相关的统计
它还可以采用以下值:
all:返回所有部分
default:仅返回默认的部分集
如果未提供任何参数,则采用该default选项。

1.2.INFO返回信息

​ INFO命令返回的信息包含以#开头的section名称,以及格式为field:value的属性,每个属性占一行,以\r\n为换行符。以下示例为在自己搭的Redis集群下执行INFO ALL命令获取到的信息(内容过多,摘一部分),版本为4.0.12。

[root@XXGL-T-TJSYZ-app-025 src]#
[root@XXGL-T-TJSYZ-app-025 src]# redis-cli -p 6301 -c
127.0.0.1:6301> info all
# Server
redis_version:4.0.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:5adedd84859bc8f8
redis_mode:cluster
os:Linux 3.10.0-1127.8.2.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:20347
run_id:456ee2a82ded919eae43e513d15d952413c5f0e1
tcp_port:6301
uptime_in_seconds:12804
uptime_in_days:0
hz:10
lru_clock:786845
executable:/home/redis/redis-4.0.12/src/redis-server
config_file:/neworiental/zhurunhua/redis-6301/redis.conf

# Clients
connected_clients:2
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:2650352
used_memory_human:2.53M
used_memory_rss:12234752
used_memory_rss_human:11.67M
used_memory_peak:2651344
used_memory_peak_human:2.53M
used_memory_peak_perc:99.96%
used_memory_overhead:2573720
used_memory_startup:1458456
used_memory_dataset:76632
used_memory_dataset_perc:6.43%
total_system_memory:33547923456
total_system_memory_human:31.24G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:4.62
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0
...
...
127.0.0.1:6301>

二、返回信息详解

​ 请注意,根据Redis的版本,某些字段已添加或删除。因此,健壮性好的客户端应用程序应通过跳过未知属性来解析此命令的结果,并妥善处理丢失的字段。

2.1.Server部分

使用命令INFO Server查看Server部分指定信息。

#Redis服务器的版本
redis_version:4.0.12
#Git SHA1,Git上的版本号
redis_git_sha1:00000000
#Git dirty标识,Git的代码是否修改
redis_git_dirty:0
#编译时的ID
redis_build_id:5adedd84859bc8f8
#服务器的模式("standalone:单机"、"sentinel:哨兵"、"cluster:集群")
redis_mode:cluster
#安装Redis服务器的操作系统
os:Linux 3.10.0-1127.8.2.el7.x86_64 x86_64
#系统架构(32或64)
arch_bits:64
#多路复用API,Redis所使用的IO多路复用事件处理机制基于epoll模型
multiplexing_api:epoll
#Redis使用的原子操作API,gcc从4.1.2提供了__sync_*系列的builtin函数,用于提供加减和逻辑运算的原子操作。
atomicvar_api:atomic-builtin
#编译Redis时所使用的GCC版本
gcc_version:4.8.5
#服务器进程的PID
process_id:20347
#服务器运行id是每一台服务器每次运行的身份识别码,一台服务器多次运行可以生成多个运行id
run_id:456ee2a82ded919eae43e513d15d952413c5f0e1
#TCP/IP侦听端口,即Redis服务的端口
tcp_port:6301
#自Redis服务器启动以来的秒数
uptime_in_seconds:12804
#自Redis服务器启动以来的天数
uptime_in_days:0
#Redis内部调度(进行关闭timeout的客户端,删除过期key等)频率,单位是赫兹,定时任务serverCron每秒运行hz配置的次数
hz:10
#以分钟为单位进行自增的时钟(可以理解为redis内部维护的一个时钟),用于LRU管理,该时钟100ms(默认hz=10,因此每秒1000ms/10=100ms执行一次定时任务)更新一次。
lru_clock:786845
#Redis执行文件路径
executable:/home/redis/redis-4.0.12/src/redis-server
#Redis配置文件路径
config_file:/neworiental/zhurunhua/redis-6301/redis.conf

2.2.clients部分

使用命令INFO clients查看clients部分指定信息。

#客户端连接数(不包括来自副本的连接)
connected_clients:2
#当前客户端连接中,最长的输出列表(所有客户端中的最大值),可以通过配置client-output-buffer-limit限制,可以使用client list命令列出所有客户端
client_longest_output_list:0
#当前客户端连接中,最大的输入缓冲区(所有客户端中的最大值)
client_biggest_input_buf:0
#正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
blocked_clients:0

2.3.memory部分

使用命令INFO memory查看memory部分指定信息。

#由Redis分配的内存的总量,字节数
used_memory:2650352
#同上,显示的数据格式对人友好,其实就是上面的数据除以1024*1024后保留两位小数点
used_memory_human:2.53M
#从操作系统的角度,返回Redis已分配的内存总量(俗称常驻集大小)。这个值和top、ps等命令的输出一致。如key被删除后,Redis内存管理器不一定把内存归还给OS,可以Redis进程复用,故这个值会比used_memory大。
used_memory_rss:12234752
#同上,显示的数据格式对人友好
used_memory_rss_human:11.67M
#Redis消耗的峰值内存(以字节为单位)
used_memory_peak:2651344
#同上,显示的数据格式对人友好
used_memory_peak_human:2.53M
#使用内存达到峰值内存的百分比,即(used_memory/ used_memory_peak) *100%
used_memory_peak_perc:99.96%
#Redis为了维护数据集的内部机制所需的内存开销,包括所有客户端输出缓冲区、查询缓冲等
used_memory_overhead:2573720
#Redis服务器启动时消耗的内存
used_memory_startup:1458456
#数据占用的内存大小,即:used_memory - used_memory_overhead
used_memory_dataset:76632
#数据占用的内存大小的百分比:(used_memory_dataset/(used_memory-used_memory_startup)*100%
used_memory_dataset_perc:6.43%
#整个操作系统内存大小
total_system_memory:33547923456
#同上,显示的数据格式对人友好
total_system_memory_human:31.24G
#lua引擎使用的内存总量,字节数;有使用lua脚本的注意监控
used_memory_lua:37888
#同上,显示的数据格式对人友好
used_memory_lua_human:37.00K
#Redis实例配置的最大内存
maxmemory:0
#同上,显示的数据格式对人友好
maxmemory_human:0B
#Redis配置的内存驱逐策略
maxmemory_policy:noeviction
#内存的碎片率,used_memory_rss/used_memory的值。一般情况下,used_memory_rss略高于used_memory,当内存碎片较多时,则mem_fragmentation_ratio会较大,可以反映内存碎片是否很多,如果此值接近1表示服务器内存碎片很少,大于1.5表示内存碎片率较大,4.0版本之后可以使用命令:MEMORY PURGE手动回收
mem_fragmentation_ratio:4.62
#Redis使用的内存分配器为jemalloc
mem_allocator:jemalloc-4.0.3
#表示没有活动的defrag任务正在运行,1表示有活动的defrag任务正在运行(defrag:表示内存碎片整理)
active_defrag_running:0
#表示redis执行lazy free操作,在等待被实际回收的key的个数,4.0之后新增的lazy free——延迟释放功能(调用UNLINK、FLUSHDB ASYNC 或FLUSHALL ASYNC命令)
lazyfree_pending_objects:0




  • 在理想情况下, used_memory_rss 的值应该只比 used_memory 稍微高一点儿;

  • 当 rss > used ,且两者的值相差较大时,表示存在(内部或外部的)内存碎片;

  • 内存碎片的比率可以通过 mem_fragmentation_ratio的值看出;

  • 当 used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟;

  • 由于Redis无法控制其分配的内存如何映射到内存页,因此常驻内存(used_memory_rss)很高通常是内存使用量激增的结果;

  • 当 Redis 释放内存时,内存将返回给分配器,分配器可能会,也可能不会,将内存返还给操作系统;

  • 如果 Redis 释放了内存,却没有将内存返还给操作系统,那么 used_memory 的值可能和操作系统显示的 Redis 内存占用并不一致,查看 used_memory_peak 的值可以验证这种情况是否发生;

  • 要获得有关服务器内存的其他内省信息,可以参考MEMORY STATS和MEMORY DOCTOR命令。

2.4.persistence部分

使用命令INFO persistence查看persistence部分指定信息。

#服务器是否正在载入持久化文件,0代表没有,1代表正在载入
loading:0
#自上次RDB持久化以来数据更改的数量
rdb_changes_since_last_save:0
#标志位,指示RDB文件是否正在保存
rdb_bgsave_in_progress:0
#最近一次创建RDB快照文件的Unix时间戳
rdb_last_save_time:1594610462
#记录最近一次bgsave操作是否创建成功
rdb_last_bgsave_status:ok
#最近一次bgsave操作耗时秒数
rdb_last_bgsave_time_sec:0
#正在进行的RDB保存操作的持续时间(-1表示还没有执行)
rdb_current_bgsave_time_sec:-1
#上一次执行rdb操作期间copy-on-write分配的字节大小,以字节(byte)单位显示数据
rdb_last_cow_size:6512640
#aof持久化开启标识:0未开启,1开启
aof_enabled:1
#aof文件重写是否正在进行标识:0否;1是
aof_rewrite_in_progress:0
#一个标志位,记录了在RDB文件创建完毕之后,是否需要执行预约的AOF重写操作:0否 1是
#当出现RDB动作的同时也出现了自动aof重写操作,为了避免对磁盘造成压力,会将aof_rewrite_scheduled值改为1,将此次的aof重写动作推迟到rdb完成之后的下一次serverCron里才会触发。
aof_rewrite_scheduled:0
#最后一次aof重写执行时间,单位秒,不存在值为-1
aof_last_rewrite_time_sec:0
#正在执行aof重写持续时间,单位秒,不存在值为-1
aof_current_rewrite_time_sec:-1
#上次AOF重写操作的状态
aof_last_bgrewrite_status:ok
#上一次AOF写入操作的状态
aof_last_write_status:ok
#上次AOF重写操作期间copy-on-write分配的字节大小
aof_last_cow_size:6430720
#当前aof文件大小
aof_current_size:158
#服务器启动时或者最近一次AOF重写后,文件的大小
aof_base_size:158
#一个标志位,记录了是否有AOF重写操作在等待RDB文件创建完毕之后执行 0否 1是
aof_pending_rewrite:0
#当前AOF缓冲区(aof_buffer)数据大小,以字节(byte)单位显示数据
aof_buffer_length:0
#当前AOF重写缓冲区(aof_rewrite_buffer)数据大小,以字节(byte)单位显示数据
aof_rewrite_buffer_length:0
#在后台等待执行fsync(刷新内存缓冲区数据到磁盘)动作的任务数
aof_pending_bio_fsync:0
#延迟fsync计数器 此值用于aof写入磁盘策略为everysec,执行一次aof同步时,若出现一次阻塞(整个aof文件写入同步时间为2s,若因为数据太多超过2s则会阻塞主进程)则该值相对于加一,主要是避免redis的数据和AOF文件不一致。
aof_delayed_fsync:0

#如果正在执行加载操作,将会添加这些额外的字段:
#加载操作的开始时间(基于纪元的时间戳)
loading_start_time: 
#文件总大小
loading_total_bytes: 
#已经加载的字节数
loading_loaded_bytes: 
#已经加载的百分比
loading_loaded_perc: 
#预计加载完成所需的剩余秒数
loading_eta_seconds: 


2.5.stats部分

使用命令INFO stats查看stats部分指定信息。

#服务器接受的连接总数
total_connections_received:4
#服务器处理的命令总数
total_commands_processed:1274
#实时的每秒处理的命令数,相当于QPS
instantaneous_ops_per_sec:0
#Redis每秒网络输入的字节数
total_net_input_bytes:18290
#Redis每秒网络输出的字节数
total_net_output_bytes:521806
#瞬间的Redis输入网络流量(kbps) kbps:每秒钟传送多少个kb的数据。
instantaneous_input_kbps:0.00
#瞬间的Redis输出网络流量(kbps)
instantaneous_output_kbps:0.02
#由于maxclients限制而拒绝的连接数
rejected_connections:0
#主从服务器之间完全同步(SYNC)的次数,如果值比较大,说明常常出现全量复制,就得分析原因,或调整repl-backlog-size
sync_full:0
#主从服务器之间PSYNC(部分同步)成功次数
sync_partial_ok:0
#主从服务器之间PSYNC(部分同步)失败次数,一旦从服务器无法进行部分同步时,强制会进行全量同步则sync_partial_err+1则sync_full+1
sync_partial_err:0
#因为过期而被自动删除的key数量
expired_keys:0
#过期key占总key比率
expired_stale_perc:0.00
#过期的时间达到计数,即每次有key过期,+1
expired_time_cap_reached_count:0
#因内存used_memory达到maxmemory后,被驱逐的key数量
evicted_keys:0
#在主字典中成功查找到key的次数,即缓存命中数
keyspace_hits:0
#在主字典中查找key失败的次数
keyspace_misses:0
#目前被订阅的channel数量
pubsub_channels:0
#目前被订阅的pattern数量
pubsub_patterns:0
#最近一次fork操作的耗时的微秒数(BGREWRITEAOF,BGSAVE,SYNC等都会触发fork),当并发场景fork耗时过长对服务影响较大
latest_fork_usec:884
#为了数据迁移打开的socket连接数
migrate_cached_sockets:0
#slave服务器中过期key数量(仅适用于从可写的情况)
slave_expires_tracked_keys:0
#主动碎片整理命中次数(与active_defrag_key_hits区别?)
active_defrag_hits:0
#主动碎片整理未命中次数
active_defrag_misses:0
#主动碎片整理时,被整理的key数量(key命中次数)
active_defrag_key_hits:0
#主动碎片整理时,被跳过(未命中)的key的数量
active_defrag_key_misses:0

2.6.replication部分

使用命令INFO replication查看replication部分指定信息。

#------角色为slave看到的数据------
#如果实例不是任何节点的从节点,则值是”master”,如果实例从某个节点同步数据,则是”slave”。 请注意,一个从节点可以是另一个从节点的主节点(菊花链拓扑--集群不支持)
role:slave
#主节点的Host名称或IP地址
master_host:172.24.29.165
#主节点的Host名称或IP地址
master_port:6306
#与master之间的连接状态(up或者down)
master_link_status:up
#自上次与主节点交互以来,经过的秒数
master_last_io_seconds_ago:5
#指示主节点是否正在与从节点同步 0-否 1-是
master_sync_in_progress:0
#slave复制的数据偏移量
slave_repl_offset:17710
#slave优先级,越低代表越优先,比如master选举时,会优先选择slave_priority配置低的
slave_priority:100
#从库是否设置只读 1-是 0-否
slave_read_only:1
#连接的slave实例个数
connected_slaves:0
#master_replid是每次重启redis产生一个40位的ID
#slave与master成功建立主从关系后,会将master的master_replid存储在自己的master_replid上
master_replid:94b2c981ed57002192b064f26d0f1d5b9bf576c3
master_replid2:0000000000000000000000000000000000000000
#master偏移量
master_repl_offset:17710
second_repl_offset:-1
#复制积压缓冲区是否开启
repl_backlog_active:1
#复制积压缓冲区总大小,以字节(byte)单位显示
repl_backlog_size:1048576
#复制缓冲区里偏移量
repl_backlog_first_byte_offset:1
#复制缓冲区数据积压的大小,以字节(byte)单位显示
repl_backlog_histlen:17710

#------角色为master看到的数据------
#角色为master
role:master
#连接的slave数量
connected_slaves:1
#slave信息,有多少个从节点就会有多少行:ip:IP、port:端口、state:节点状态、offset:该从节点复制数据的偏移量、lag:心跳检测,slave服务器最后一次向master服务器发送REPLCONF ACK命令距离现在过了多少秒
slave0:ip=172.24.29.163,port=6301,state=online,offset=508774,lag=1

#以下信息同上一小节,
master_replid:741f841994a9b0f88d86d5d1eeeb704ad31c4da5
master_replid2:3e6b3f5b0b7c1bf857eb343174f5dec91d87b099
master_repl_offset:508788
second_repl_offset:389187
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:388977
repl_backlog_histlen:119812

#如果SYNC操作正在进行,则会提供以下这些字段:
# 同步完成前剩余的字节数
master_sync_left_bytes:
#在SYNC操作期间自上次传输IO以来的秒数
master_sync_last_io_seconds_ago: 

#如果主从节点之间的连接断开了,则会提供一个额外的字段:
#自连接断开以来,经过的秒数
master_link_down_since_seconds: 

#如果服务器配置了min-slaves-to-write(或从Redis 5开始,使用min-replicas-to-write)指令,则会提供一个附加字段:
#当前认为良好的副本数量
min_slaves_good_slaves:


2.7.cpu部分

使用命令INFO cpu查看cpu部分指定信息。fork/进程

#redis主进程在内核态所占用的CPU资源
used_cpu_sys:11.57
#redis主进程在用户态所占用的CPU资源
used_cpu_user:6.83
#redis中后台进程在内核态所占用的CPU资源
used_cpu_sys_children:0.01
#redis中后台进程在用户态所占用的CPU资源 
used_cpu_user_children:0.00

2.8.commandstats部分

使用命令INFO commandstats查看commandstats部分指定信息。

#按命令统计
#calls:调用的次数;usec:消耗的总CPU时间;usec_per_call:每次命令执行所消耗的平均CPU时间
cmdstat_command:calls=3,usec=2028,usec_per_call=676.00
cmdstat_replconf:calls=949015,usec=1996206,usec_per_call=2.10
cmdstat_psync:calls=1,usec=2012,usec_per_call=2012.00
cmdstat_cluster:calls=1,usec=560,usec_per_call=560.00
cmdstat_get:calls=1,usec=2,usec_per_call=2.00
cmdstat_client:calls=3,usec=140,usec_per_call=46.67
cmdstat_ping:calls=1,usec=1,usec_per_call=1.00
cmdstat_info:calls=5,usec=526,usec_per_call=105.20
cmdstat_lpush:calls=1,usec=25,usec_per_call=25.00

2.9.cluster部分

使用命令INFO cluster查看cluster部分指定信息。

#实例是否启用集群模式:0-否,1-是
cluster_enabled:1

2.10.keyspace部分

使用命令INFO keyspace查看keyspace部分指定信息。

#列出每个redis数据库的使用情况
#keys:key的数量;expires:过期的key数量;
#avg_ttl:估算设置过期时间key的平均寿命,redis会抽样估算实例中设置TTL键的平均时长,单位毫秒。如果无TTL键或在Slave则avg_ttl一直为0
db0:keys=3,expires=0,avg_ttl=0


猜你喜欢

转载自blog.csdn.net/sinat_14840559/article/details/107458300