0%

查看统计信息

Redis 统计信息详解(基于 info 命令)

Redis 的 info 命令是监控和诊断 Redis 实例的核心工具,它返回服务器运行状态、内存使用、持久化、主从复制等多维度的统计信息。本文基于 Redis 6.2.1 版本,解析 info 命令的输出结构及关键指标,帮助你快速定位问题并优化性能。

info 命令基础

  • 使用方式
    redis-cli 中执行 info 查看完整信息,或通过 info <section> 查看指定模块(如 info memory 查看内存信息)。
  • 输出结构:信息按模块划分(如 ServerClientsMemory 等),每个模块包含若干键值对指标。

核心模块及关键指标解析

1. Server:服务器基础信息

记录 Redis 版本、运行模式、进程信息等基础参数,核心指标:

指标 说明 关注点
redis_version Redis 版本号(如 6.2.1)。 确认版本是否兼容新特性(如 6.0+ 支持多线程)。
redis_mode 运行模式(standalone 单机 / cluster 集群 / sentinel 哨兵)。 验证部署模式是否符合预期。
process_id Redis 进程 PID。 用于定位进程(如 kill -9 <pid> 终止进程)。
uptime_in_seconds 运行时长(秒)。 结合故障时间判断是否刚重启过。
lru_clock LRU 时钟(分钟级自增),用于过期键淘汰。 无直接监控意义,内部用于 LRU 算法。

2. Clients:客户端连接信息

监控客户端连接状态,核心指标:

指标 说明 关注点
connected_clients 当前连接的客户端数量。 若持续增长,可能是客户端未正常释放连接(检查 timeout 配置)。
maxclients 最大允许的客户端连接数(由 maxclients 配置)。 connected_clients 接近此值,需调大配置避免连接被拒绝。
blocked_clients 处于阻塞状态的客户端数量(如执行 BLPOPBRPOP 等命令)。 若过大,可能是阻塞命令未及时获取数据(如消息队列为空)。
client_recent_max_input_buffer 最近客户端输入缓冲区的最大值(字节)。 过大可能是客户端发送大命令(如批量 MSET),需警惕 OOM。

3. Memory:内存使用信息

最关键的模块之一,反映内存占用和碎片化情况,核心指标:

指标 说明 关注点
used_memory Redis 分配的内存总量(字节,含数据、缓冲区、Lua 脚本等)。 结合 maxmemory 判断是否接近内存上限。
used_memory_human 人类可读的内存总量(如 1.03M)。 快速判断内存规模(如是否超过预期的 1GB)。
used_memory_rss 操作系统分配给 Redis 进程的物理内存( Resident Set Size)。 used_memory_rss 远大于 used_memory,表示内存碎片化严重(mem_fragmentation_ratio > 1.5 需优化)。
used_memory_peak 内存使用峰值(字节)。 若峰值接近 maxmemory,需警惕内存溢出风险。
mem_fragmentation_ratio 内存碎片率(used_memory_rss / used_memory)。 - 大于 1.5:碎片严重,考虑重启 Redis 释放碎片。 - 小于 1:部分内存被换出到 swap,性能会下降(需禁用 swap)。
maxmemory 最大可用内存(字节,0 表示无限制)。 生产环境必须设置(如物理内存的 70%),避免耗尽系统内存。
maxmemory_policy 内存淘汰策略(如 noevictionallkeys-lru)。 缓存场景需设置为 allkeys-lruvolatile-lru

4. Persistence:持久化信息

反映 RDB 和 AOF 持久化状态,核心指标:

指标 说明 关注点
loading 是否正在加载持久化文件(0 否 / 1 是)。 若启动后长期为 1,可能是持久化文件过大或损坏。
rdb_bgsave_in_progress 是否正在后台生成 RDB 快照(0 否 / 1 是)。 频繁生成 RDB 会消耗 CPU 和 IO,需调整 save 配置。
rdb_last_save_time 最后一次 RDB 快照生成的时间戳。 结合业务判断快照是否按时生成(如每小时一次)。
rdb_last_bgsave_status 最后一次 RDB 生成结果(ok / err)。 若为 err,检查磁盘空间或权限(stop-writes-on-bgsave-error 可能导致写操作阻塞)。
aof_enabled 是否开启 AOF 持久化(0 否 / 1 是)。 生产环境建议开启(yes),提升数据安全性。
aof_rewrite_in_progress 是否正在后台重写 AOF 文件(0 否 / 1 是)。 重写会消耗资源,避免与 RDB 同时执行(Redis 会自动规避)。

5. Stats:通用统计信息

记录命令执行、连接、过期键等全局统计,核心指标:

指标 说明 关注点
total_commands_processed 累计执行的命令总数。 结合运行时间计算 QPS(total_commands_processed / uptime_in_seconds)。
instantaneous_ops_per_sec 每秒执行的命令数(实时 QPS)。 峰值是否超过 Redis 承载能力(单机通常支持 10 万 + QPS)。
rejected_connections maxclients 限制被拒绝的连接数。 非零表示连接数已达上限,需调大 maxclients
expired_keys 累计因过期被删除的键数。 突增可能是大量键同时过期(需优化过期时间随机性)。
evicted_keys 因内存不足被淘汰的键数(maxmemory_policynoeviction 时)。 非零表示内存不足,需扩容或优化淘汰策略。
keyspace_hits / keyspace_misses 缓存命中 / 未命中次数。 命中率 = hits / (hits + misses),应 > 90%,否则缓存设计不合理。

6. Replication:主从复制信息

主从或集群架构的关键指标:

指标 说明 关注点
role 节点角色(master 主节点 / slave 从节点)。 验证主从关系是否正确(如从节点应显示 slave)。
connected_slaves 主节点连接的从节点数量。 若少于预期,检查从节点是否正常连接(网络、密码是否正确)。
master_repl_offset 主节点的复制偏移量(数据同步进度)。 从节点的 slave_repl_offset 应接近此值,否则同步延迟过大。
repl_backlog_size 复制积压缓冲区大小(字节)。 过小可能导致从节点断线后需全量同步(建议设为 100MB+ 用于高写入场景)。

7. CPU:CPU 使用信息

反映 Redis 对 CPU 的消耗:

指标 说明 关注点
used_cpu_sys / used_cpu_user 系统态 / 用户态 CPU 耗时(秒)。 占比过高可能是命令执行效率低(如 KEYS 命令)或网络 IO 繁忙。
used_cpu_sys_children / used_cpu_user_children 后台进程(如 RDB/AOF 子进程)的系统态 / 用户态 CPU 耗时。 若过大,可能是持久化操作频繁(如 RDB 生成过勤)。

8. Keyspace:键空间统计

按数据库划分的键数量统计:

1
2
db0:keys=15,expires=0,avg_ttl=0
db2:keys=1,expires=0,avg_ttl=0
  • keys:数据库中的键总数。
  • expires:设置了过期时间的键数。
  • avg_ttl:键的平均剩余生存时间(秒)。

关注点

  • 某数据库键数量突增可能是内存泄漏(如未设置过期时间的临时键)。
  • expires 为 0 表示所有键永不过期,需确认是否符合业务预期。

实用场景与分析技巧

  1. 性能瓶颈定位
    • instantaneous_ops_per_sec 低但 used_cpu_user 高:存在慢命令(如 HGETALL 大哈希表),用 slowlog get 排查。
    • mem_fragmentation_ratio > 1.5:内存碎片严重,可重启 Redis 或开启 activedefrag(主动碎片整理)。
  2. 可用性监控
    • connected_slaves 与预期不符:检查主从复制配置(replicaofmasterauth)。
    • aof_last_write_status:err:AOF 写入失败,可能是磁盘满或权限问题,需紧急处理(否则 appendfsync everysec 可能丢失数据)。
  3. 缓存有效性分析
    • 命中率 keyspace_hits/(keyspace_hits + keyspace_misses) 过低:优化缓存策略(如增加热点数据缓存时间)

欢迎关注我的其它发布渠道