在Redis运维和性能调优中,Redis info命令查看服务器状态是每一位开发者必须掌握的诊断核心技能。其核心价值在于通过单一命令提供包括内存、持久化、客户端、CPU等在内的17个维度的实时指标,为Redis实例的健康诊断、性能瓶颈定位和容量规划提供了全面、权威的数据支撑。这个看似简单的命令输出,实则包含了Redis内部状态的完整快照,是预防线上故障、优化系统性能的第一道防线。深入掌握INFO命令的解读艺术,是构建可靠Redis架构的基石,也是鳄鱼java在十年运维实践中总结的宝贵经验。
一、INFO命令全景:从宏观概览到微观诊断

Redis info命令查看服务器状态的输出是一个结构化的键值对集合,默认包含所有模块信息。理解其输出结构是有效诊断的第一步。
# 基础使用:获取完整信息
127.0.0.1:6379> INFO
# Server
redis_version:6.2.6
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:abcdef123456
redis_mode:standalone
os:Linux 5.4.0-80-generic x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
...
# 获取特定模块信息
127.0.0.1:6379> INFO memory # 仅内存信息
127.0.0.1:6379> INFO stats # 仅统计信息
127.0.0.1:6379> INFO all # 全部信息(与默认相同)
INFO命令的输出包含17个标准模块,每个模块聚焦不同维度。在鳄鱼java的监控体系中,我们将其分为三个层级:健康指标(必须监控)、性能指标(重点关注)、信息指标(参考记录)。理解这种分层,是高效利用INFO命令的关键。
二、核心模块深度解析:关键指标的预警阈值
内存模块(Memory)—— 最关键的容量指标
# 内存信息示例
used_memory:1024000000 # 实际分配内存 1GB
used_memory_human:977.52M # 人类可读格式
used_memory_rss:1200000000 # 系统角度内存 1.2GB
used_memory_peak:1500000000 # 历史峰值 1.5GB
used_memory_lua:37888 # Lua引擎内存
mem_fragmentation_ratio:1.17 # 内存碎片率
maxmemory:2000000000 # 最大内存限制 2GB
maxmemory_policy:allkeys-lru # 淘汰策略
关键阈值与行动建议:
1. used_memory/maxmemory > 85%:触发容量告警,需要扩容或清理
2. mem_fragmentation_ratio > 1.5:中度碎片,>2.0需要重启
3. used_memory_rss/used_memory > 1.3:内存交换风险
鳄鱼java在金融系统中曾通过监控mem_fragmentation_ratio,提前3天预测到内存碎片问题,通过重启从节点避免了主节点故障。
持久化模块(Persistence)—— 数据安全生命线
# RDB持久化状态 rdb_last_save_time:1625097600 # 上次保存时间戳 rdb_changes_since_last_save:15000 # 上次保存后的变更数 rdb_last_bgsave_status:ok # 上次后台保存状态 rdb_last_bgsave_time_sec:3 # 上次保存耗时(秒)AOF持久化状态
aof_enabled:1 # AOF是否启用 aof_rewrite_in_progress:0 # 是否正在重写 aof_last_rewrite_time_sec:5 # 上次重写耗时 aof_current_size:500000000 # 当前AOF文件大小 aof_base_size:300000000 # 上次重写时大小
监控要点:
1. rdb_changes_since_last_save:评估数据丢失风险
2. aof_current_size/aof_base_size > 2:AOF重写延迟告警
3. rdb_last_bgsave_time_sec > 30:RDB保存过慢,影响性能
三、性能瓶颈定位:Stats与Commandstats模块实战
统计模块(Stats)—— 吞吐量与命中率
# 核心性能指标
total_connections_received:100000 # 历史总连接数
total_commands_processed:50000000 # 历史总命令数
instantaneous_ops_per_sec:12500 # 当前每秒操作数
total_net_input_bytes:5000000000 # 总输入流量
total_net_output_bytes:20000000000 # 总输出流量
instantaneous_input_kbps:125.50 # 当前输入带宽
instantaneous_output_kbps:980.75 # 当前输出带宽
keyspace_hits:45000000 # 键命中次数
keyspace_misses:500000 # 键未命中次数
命中率计算与解读:
缓存命中率 = keyspace_hits / (keyspace_hits + keyspace_misses)
在鳄鱼java的电商平台监控中,我们设定了三级告警:
- 警告级:命中率 < 90%
- 严重级:命中率 < 80% 持续5分钟
- 紧急级:命中率 < 70% 且 QPS下降
命令统计模块(Commandstats)—— 热点命令分析
# 命令级统计(Redis 2.6+)
cmdstat_get:calls=25000000,usec=125000000,usec_per_call=5.00
cmdstat_set:calls=8000000,usec=64000000,usec_per_call=8.00
cmdstat_keys:calls=5,usec=2500000,usec_per_call=500000.00
cmdstat_hgetall:calls=50000,usec=25000000,usec_per_call=500.00
关键洞察:
1. usec_per_call异常高:如KEYS命令平均500ms,必须立即禁止
2. 特定命令调用占比过高:如HGETALL占比超过30%,需优化数据结构
3. 读写比例失衡:GET:SET比例超过20:1,可能缓存穿透
鳄鱼java在某社交应用调优中,通过cmdstat_hgetall发现大量大哈希表全量查询,将其优化为HSCAN分页后,平均响应时间从320ms降至45ms。
四、复制与集群健康:主从延迟与故障转移
复制模块(Replication)—— 主从同步状态
# 主节点视角 role:master connected_slaves:2 slave0:ip=192.168.1.101,port=6379,state=online,offset=100000,lag=0 slave1:ip=192.168.1.102,port=6379,state=online,offset=99950,lag=1从节点视角
role:slave master_host:192.168.1.100 master_port:6379 master_link_status:up master_last_io_seconds_ago:3 master_sync_in_progress:0 slave_repl_offset:100000 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:100050 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:95000 repl_backlog_histlen:5000
关键监控项:
1. master_link_status != up:主从连接断开,立即告警
2. master_last_io_seconds_ago > 10:同步延迟过高
3. lag > 5:从节点落后主节点5个命令以上
4. repl_backlog_histlen/repl_backlog_size > 0.8:复制积压缓冲区即将满
集群模块(Cluster)—— 分布式健康度
# 集群专属信息(集群模式启用时)
cluster_enabled:1
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:12
cluster_my_epoch:6
cluster_stats_messages_sent:500000
cluster_stats_messages_received:499800
五、实战案例:通过INFO命令诊断典型问题
案例一:内存泄漏的渐进式诊断
某服务出现间歇性超时,通过INFO命令排查:
# 第一次采样(T1) used_memory: 2.1GB used_memory_peak: 2.1GB mem_fragmentation_ratio: 1.052小时后采样(T2)
used_memory: 2.8GB # 增长700MB used_memory_peak: 2.8GB mem_fragmentation_ratio: 1.06 # 碎片率正常
分析结论:非碎片导致,疑似内存泄漏
进一步检查客户端连接
connected_clients: 1250 # 正常应为300左右 client_longest_output_list: 8500 # 客户端输出缓冲区堆积 client_biggest_input_buf: 1024
根本原因:某客户端未及时读取响应,导致输出缓冲区积累
解决方案:优化客户端或设置client-output-buffer-limit
案例二:CPU瓶颈的根因定位
# CPU使用率高,但QPS不高 instantaneous_ops_per_sec: 3500 # 正常应为10000+ instantaneous_cpu_utilization: 95% # CPU使用率极高检查命令统计
cmdstat_evalsha:calls=50000,usec=250000000,usec_per_call=5000.00 cmdstat_lrange:calls=80000,usec=160000000,usec_per_call=2000.00
发现:Lua脚本和LRANGE命令平均耗时异常
进一步检查慢查询日志确认
解决方案:优化Lua脚本,避免大范围LRANGE操作
鳄鱼java在性能优化服务中,曾通过INFO commandstats发现某个边缘业务每小时调用SORT命令上万次,平均耗时120ms。将其优化为应用层排序后,集群整体CPU使用率下降18%。
六、自动化监控集成:从手动检查到智能告警
方案一:Prometheus + Redis Exporter
# Redis Exporter配置示例
# 启动Exporter
./redis_exporter --redis.addr=localhost:6379 --web.listen-address=:9121
Prometheus配置
scrape_configs:
- job_name: 'redis'
static_configs:
- targets: ['localhost:9121']
关键告警规则(Alertmanager)
groups:
name: redis_alerts rules:-
alert: RedisDown expr: redis_up == 0 for: 1m annotations: summary: "Redis实例下线"
-
alert: RedisMemoryHigh expr: redis_memory_used_bytes / redis_memory_max_bytes > 0.85 for: 5m annotations: summary: "Redis内存使用超过85%"
alert: RedisHitRateLow expr: rate(redis_keyspace_hits_total[5m]) / (rate(redis_keyspace_hits_total[5m]) + rate(redis_keyspace_misses_total[5m])) < 0.85 for: 10m annotations: summary: "Redis缓存命中率低于85%"
-
方案二:自定义监控脚本
#!/bin/bash # INFO命令监控脚本(生产环境简化版)REDIS_HOST="localhost" REDIS_PORT=6379 WARNING_THRESHOLD=85 CRITICAL_THRESHOLD=95
获取INFO输出并解析关键指标
INFO_OUTPUT=REDIS_HOST -p $REDIS_PORT INFO)
解析函数
parse_metric() { echo "INFO_OUTPUT" | grep "^1:" | cut -d: -f2 }
获取关键指标
USED_MEMORY=(parse_metric "mem_fragmentation_ratio") CONNECTED_CLIENTS=(parse_metric "instantaneous_ops_per_sec") HIT_RATE=(awk "BEGIN {print (parse_metric keyspace_hits) /
((parse_metric keyspace_misses)) * 100}")生成监控报告
echo "=== Redis健康报告 USED_MEMORY (碎片率: CONNECTED_CLIENTS" echo "实时QPS: {HIT_RATE}%"
阈值检查
if [ HIT_RATE < 90" | bc) -eq 1 ]; then echo "警告: 命中率偏低!" | mail -s "Redis告警" admin@example.com fi
在鳄鱼java的监控体系中,我们实现了三级监控:
1. 实时监控:每10秒采集关键指标(内存、连接、QPS)
2. 性能分析:每小时采集完整INFO,分析趋势
3. 深度诊断:每日生成健康报告,包含commandstats分析
七、总结:从数据解读到架构洞察
深入掌握Redis info命令查看服务器状态,本质上是将原始数据转化为架构洞察的艺术。它要求运维者从指标关联、趋势分析、根因定位三个维度进行系统思考,超越简单的阈值告警,进入预防性运维的深水区。
在构建Redis监控体系时,请系统性地回答:
1. 我的监控是否覆盖了所有关键维度? 内存、CPU、网络、持久化、复制、集群状态是否都有相应指标?
2. 告警阈值是否基于业务特征动态调整? 大促期间和日常流量的阈值是否应该不同?
3. 能否从指标异常追溯到代码缺陷? 当命中率下降时,能否定位到具体的业务代码变更?
4. 监控数据是否指导了容量规划? 能否基于历史趋势预测未来3个月的资源需求?
在鳄鱼java看来,INFO命令不仅是一个诊断工具,更是Redis与运维者之间的对话窗口。每一次指标采集,每一次趋势分析,都是对系统健康状况的深度聆听。你的监控实践,是被动响应告警的救火队,还是主动预防问题的建筑师?这个问题的答案,决定了你的Redis服务在面对业务增长时,是游刃有余还是疲于奔命。
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。





