导读:本期聚焦于小宵创作的《如何通过Redis INFO命令快速定位实例运行隐患?》,敬请观看详情。Redis实例出现延迟升高或内存异常时,盲目重启往往掩盖真正问题。INFO命令是Redis内置的状态自检入口,它一次性返回服务器、客户端、内存、持久化、复制、CPU等模块的核心指标。搞懂这些指标的口径比记住命令本身更重要,例如内存模块中的used_memory与used_memory_rss的差值反映碎片程度,instantaneous_ops_per_sec与total_commands_processed分别代表瞬时吞吐与累计调用量。本文从INFO命令输出结构讲起,逐段拆解Server、Memory、Persistence、Replication等高频区块,说明哪些指标适合实时监控、哪些适合事后排查,并结合内存碎片率、主从延迟、RDB写入状态等典型场景给出判断方法。看完后你可以建立一套面向Redis健康检查的指标清单,避免被单一内存使用率误导。

Redis的INFO命令是排查性能问题和容量规划时最常用的入口之一。执行INFO后,Redis会返回以井号开头的多个区块,每个区块内是成对的键值数据,例如 used_memory:1048576 就代表当前内存占用。相比MONITOR命令会逐条打印客户端请求,INFO读取的是服务端内部维护的计数器快照,开销极低,适合在线上频繁执行。

如何通过Redis INFO命令快速定位实例运行隐患?

一、INFO命令的输出结构与常用参数

完整执行 redis-cli info 会得到十几个以井号开头的区块,例如 Server、Clients、Memory、Persistence、Stats、Replication、CPU、Cluster、Keyspace。每个区块由多个键值对组成,键名采用小写英文字符加下划线,值则根据指标类型可能是整数、浮点数或字符串。这种设计让INFO命令既适合人工快速查看,也方便脚本通过管道解析。

如果只想查看某个区块,可以使用 info section 语法,例如 info memory 只返回内存相关指标。Redis 7之前的版本也支持同时指定多个区块,用空格分隔,如 info memory replication。需要注意,不同Redis版本返回的指标数量会略有差异,升级后如果有依赖某些字段的监控脚本,应当逐个确认字段是否仍然存在。

INFO命令的参数中,default 表示返回默认区块集合,all 表示返回全部区块。很多自动化运维工具会定期执行 redis-cli info all 并全量存储,便于事后回溯。下面是一段精简后的输出结构示例,实际输出内容更多。

$ redis-cli info server
# Server
redis_version:7.0.5
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:abcdef123456
redis_mode:standalone
os:Linux 5.15.0-67-generic x86_64
arch_bits:64
process_id:2048
tcp_port:6379
uptime_in_seconds:86400
uptime_in_days:1

从服务器区块可以看到进程号、监听端口、运行时长和操作系统信息。运行时长对于判断实例是否刚刚重启过非常直观,如果 uptime_in_seconds 很小,但业务请求量很高,需要警惕预热阶段或意外重启带来的缓存击穿。

二、内存相关指标与碎片率判断

内存问题在Redis运维中最常见,而INFO Memory区块提供了判断内存健康度的关键数据。used_memory 是Redis分配器实际分配给数据的总字节数,used_memory_rss 是操作系统视角的常驻内存大小,二者并不相同。当 used_memory_rss 明显大于 used_memory 时,说明存在内存碎片;如果 used_memory_rss 小于 used_memory,通常表示部分数据被换出到了交换分区,性能会受到严重影响。

判断碎片最直接的指标是 mem_fragmentation_ratio,它的计算方式为 used_memory_rss 除以 used_memory。正常情况下该值在1到1.5之间,超过1.5代表碎片较多,可以考虑通过 CONFIG SET activedefrag yes 开启主动碎片整理。如果该值长期低于1,则需要检查系统是否启用了swap,或者是否设置了过大的 maxmemory 导致内存压力。

$ redis-cli info memory
# Memory
used_memory:123456
used_memory_human:120.56K
used_memory_rss:200704
used_memory_peak:1572864
mem_fragmentation_ratio:1.63
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_allocator:jemalloc-5.1.0

上面示例中碎片率为1.63,说明已经存在一定程度的内存浪费。如果实例设置了 maxmemory,还需要结合 maxmemory_policy 观察是否发生键淘汰。生产环境不建议使用 noeviction 策略,因为写入请求会直接报错,可能影响业务。常见的策略包括 allkeys-lruvolatile-lru,具体选择取决于缓存数据和持久数据的比例。

另外,used_memory_peak 记录了历史内存使用的最大值,配合当前 used_memory 可以判断内存增长是否已经见顶。如果峰值持续上升,说明缓存写入量在增加,需要提前规划扩容或优化键的过期时间。

三、持久化与复制状态指标

持久化区块是判断数据安全风险的核心区域。RDB相关指标中,rdb_last_bgsave_status 表示最近一次后台保存快照的状态,值为 ok 表示成功,值为 err 表示失败。如果该指标长期为 err,需要查看 rdb_last_bgsave_time_sec 和Redis日志,确认是否因为内存不足或磁盘写入故障导致。

AOF相关指标同样重要。aof_enabled 表示AOF是否开启,aof_last_write_status 表示最近一次AOF缓冲写入磁盘的状态。AOF重写通过 aof_rewrite_in_progress 反映,值为1表示正在重写,0表示空闲。如果重写频繁发生,说明AOF文件增长过快,可能存在大量重复写命令或过期键未及时清理。

复制区块用于判断主从节点的同步健康度。role 字段说明当前实例是 master 还是 slave。在主节点上,connected_slaves 表示在线从库数量;在从节点上,master_link_status 表示与主库的连接是否正常。master_last_io_seconds_ago 是从库与主库最近一次通信的间隔秒数,如果该值持续大于5秒,需要警惕主从链路延迟。

$ redis-cli info replication
# Replication
role:slave
master_host:192.168.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:123456
master_repl_offset:123456

上面示例中,从库的 master_link_statusup,且 slave_repl_offsetmaster_repl_offset 相等,说明复制进度完全一致,没有积压。如果偏移量差值持续增大,说明从库追不上主库的写入速度,需要排查从库性能或网络带宽。

四、基于INFO的监控告警指标清单

把INFO命令应用于日常监控时,不能把所有指标都纳入告警,否则会出现大量无效通知。建议将指标分为实时告警和趋势分析两类。实时告警关注那些一旦异常就会立刻影响业务可用性的指标,例如 rdb_last_bgsave_statuserraof_last_write_statuserrmaster_link_statusdownmem_fragmentation_ratio 超过2、connected_clients 接近配置上限等。

趋势分析则适合观察长期变化规律,例如 total_net_input_bytestotal_net_output_bytes 可以反映带宽压力,keyspace_hitskeyspace_misses 可以计算缓存命中率。缓存命中率计算公式为 keyspace_hits / (keyspace_hits + keyspace_misses),通常建议保持在90%以上。如果命中率突然下降,往往意味着业务访问模式发生变化,大量未命中的键直接访问了后端数据库。

$ redis-cli info stats | grep keyspace_
keyspace_hits:1000
keyspace_misses:20
$ redis-cli info stats | grep total_net
total_net_input_bytes:987654
total_net_output_bytes:1234567

除了上述指标,CPU区块中的 used_cpu_sysused_cpu_user 记录了Redis进程消耗的CPU时间。如果 used_cpu_sys 占比较高,说明内核态开销大,可能与频繁的网络中断或内存分配有关;如果 used_cpu_user 占比较高,通常说明Redis执行了过多复杂命令或慢查询。结合 instantaneous_ops_per_sectotal_commands_processed,可以区分瞬时压力与长期负载。

最后需要记住,INFO命令返回的是采样时刻的快照数据,有些指标如 instantaneous_ops_per_sec 只是短时间内的估计值,单次查看意义有限,连续多次采集并观察趋势才能准确判断实例运行状态。把INFO和慢查询日志、客户端列表结合起来,可以更完整地还原一次性能问题的发生过程。

Redis INFO命令内存碎片率持久化状态修改时间:2026-08-20 13:21:24

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。