Redis 线上问题排查简版手册

Redis 线上问题排查完整手册

目录

  1. 问题分类与快速定位
  2. 性能问题排查
  3. 内存问题诊断
  4. 连接与网络问题
  5. 常用排查命令
  6. 监控指标分析
  7. 应急处理方案
  8. 性能优化建议

问题分类与快速定位

1. 性能问题

现象:

  • 响应时间增加,P99延迟上升
  • QPS下降,吞吐量不足
  • CPU使用率异常(过高或过低)

快速检查命令:

bash 复制代码
# 检查基本信息
redis-cli info stats
redis-cli info replication
redis-cli info memory

# 检查慢查询
redis-cli slowlog get 10

# 实时监控命令执行
redis-cli monitor

2. 内存问题

现象:

  • 内存使用率持续上升
  • 出现OOM错误
  • 键过期不及时

快速检查:

bash 复制代码
# 内存使用详情
redis-cli info memory

# 检查大键
redis-cli --bigkeys

# 内存使用分析
redis-cli memory usage <key>
redis-cli memory stats

3. 连接问题

现象:

  • 连接超时或拒绝
  • 连接数异常
  • 客户端频繁重连

快速检查:

bash 复制代码
# 连接信息
redis-cli info clients
redis-cli client list

# 网络连接检查
netstat -an | grep :6379
ss -tulpn | grep :6379

性能问题排查

1. 慢查询分析

bash 复制代码
# 设置慢查询阈值(微秒)
CONFIG SET slowlog-log-slower-than 10000

# 设置慢查询记录数量
CONFIG SET slowlog-max-len 1000

# 查看慢查询
SLOWLOG GET 20

# 查看慢查询统计
SLOWLOG LEN

# 清空慢查询日志
SLOWLOG RESET

2. 热点键分析

bash 复制代码
# 实时监控(生产环境谨慎使用)
redis-cli monitor | head -n 1000

# 使用采样监控
redis-cli --latency-history -i 1

# 检查键的访问频率(Redis 4.0+)
redis-cli --hotkeys

3. 延迟诊断

bash 复制代码
# 延迟测试
redis-cli --latency
redis-cli --latency-history
redis-cli --latency-dist

# 内在延迟测试
redis-cli --intrinsic-latency 60

# 网络延迟测试
ping <redis-server-ip>

4. QPS和吞吐量监控

bash 复制代码
# 实时统计信息
redis-cli --stat

# 每秒命令执行数
redis-cli info stats | grep instantaneous_ops_per_sec

# 网络吞吐量
redis-cli info stats | grep instantaneous_input_kbps
redis-cli info stats | grep instantaneous_output_kbps

内存问题诊断

1. 内存使用分析

bash 复制代码
# 详细内存信息
redis-cli info memory

# 关键指标说明:
# used_memory: 实际使用内存
# used_memory_rss: 系统分配内存
# used_memory_peak: 历史最大内存使用
# mem_fragmentation_ratio: 内存碎片率

2. 大键检测

bash 复制代码
# 扫描大键(会影响性能)
redis-cli --bigkeys

# 指定数据库扫描
redis-cli -n 1 --bigkeys

# 采样扫描(降低影响)
redis-cli --bigkeys -i 0.01

3. 键空间分析

bash 复制代码
# 键的内存使用
redis-cli memory usage <key>

# 获取键类型和TTL
redis-cli type <key>
redis-cli ttl <key>

# 扫描键模式
redis-cli --scan --pattern "prefix:*"

4. 内存碎片处理

bash 复制代码
# 检查碎片率
redis-cli info memory | grep mem_fragmentation_ratio

# 主动碎片整理(Redis 4.0+)
CONFIG SET activedefrag yes
CONFIG SET active-defrag-ignore-bytes 100mb
CONFIG SET active-defrag-threshold-lower 10

# 手动触发碎片整理
MEMORY PURGE

连接与网络问题

1. 连接数监控

bash 复制代码
# 当前连接信息
redis-cli info clients

# 客户端列表
redis-cli client list

# 按类型统计连接
redis-cli client list | awk '{print $3}' | sort | uniq -c

# 关闭空闲连接
redis-cli client kill type normal idle 300

2. 连接池配置检查

bash 复制代码
# 最大连接数
CONFIG GET maxclients

# 超时设置
CONFIG GET timeout

# TCP保活设置
CONFIG GET tcp-keepalive

3. 网络问题诊断

bash 复制代码
# 网络连通性测试
telnet <redis-ip> 6379
nc -zv <redis-ip> 6379

# 防火墙检查
iptables -L | grep 6379

# 端口监听状态
netstat -tlnp | grep 6379
ss -tlnp | grep 6379

4. SSL/TLS问题

bash 复制代码
# SSL连接测试
redis-cli --tls --cert ./client.crt --key ./client.key --cacert ./ca.crt

# 证书验证
openssl s_client -connect <redis-ip>:6380 -cert client.crt -key client.key

常用排查命令

1. 信息查询命令

bash 复制代码
# 服务器信息
INFO server
INFO clients
INFO memory
INFO persistence
INFO stats
INFO replication
INFO cpu
INFO cluster
INFO keyspace

# 配置查询
CONFIG GET "*"
CONFIG GET maxmemory
CONFIG GET save

2. 实时监控命令

bash 复制代码
# 命令监控
MONITOR

# 发布订阅监控
PSUBSCRIBE __keyevent@0__:*

# 客户端监控
CLIENT LIST
CLIENT TRACKING ON

3. 调试命令

bash 复制代码
# 对象调试
DEBUG OBJECT <key>

# 段错误调试
DEBUG SEGFAULT

# 内存报告
MEMORY DOCTOR

# 延迟监控
LATENCY MONITOR
LATENCY LATEST
LATENCY HISTORY <event>

监控指标分析

1. 核心性能指标

bash 复制代码
# QPS相关
instantaneous_ops_per_sec        # 每秒操作数
total_commands_processed         # 总命令数

# 延迟相关
latency_percentiles_usec         # 延迟百分位数
avg_ttl                          # 平均TTL

# 内存相关
used_memory                      # 使用内存
used_memory_rss                  # RSS内存
mem_fragmentation_ratio          # 碎片率

# 连接相关
connected_clients                # 连接数
blocked_clients                  # 阻塞客户端数

2. 关键阈值设置

bash 复制代码
# 内存告警阈值
used_memory > maxmemory * 0.8
mem_fragmentation_ratio > 1.5

# 性能告警阈值
instantaneous_ops_per_sec < 1000
slowlog_len > 100

# 连接告警阈值
connected_clients > maxclients * 0.8
blocked_clients > 10

应急处理方案

1. 内存不足处理

bash 复制代码
# 立即释放内存
FLUSHDB                          # 清空当前数据库
FLUSHALL                         # 清空所有数据库

# 删除大键
UNLINK <big-key>                 # 异步删除

# 调整内存策略
CONFIG SET maxmemory-policy allkeys-lru
CONFIG SET maxmemory <new-limit>

2. 性能急剧下降处理

bash 复制代码
# 禁用危险命令
CONFIG SET rename-command-keys ""
CONFIG SET rename-command-flushall ""

# 限制慢查询
CONFIG SET slowlog-log-slower-than 1000

# 重启服务(最后手段)
sudo systemctl restart redis

3. 连接问题处理

bash 复制代码
# 清理僵尸连接
CLIENT KILL TYPE normal IDLE 300

# 增加连接限制
CONFIG SET maxclients 20000

# 启用连接池
CONFIG SET tcp-keepalive 60

性能优化建议

1. 配置优化

bash 复制代码
# 内存优化
maxmemory-policy allkeys-lru     # 内存淘汰策略
hash-max-ziplist-entries 512     # 哈希压缩阈值
list-max-ziplist-size -2         # 列表压缩设置

# 持久化优化
save ""                          # 禁用RDB(如果不需要)
appendonly yes                   # 启用AOF
appendfsync everysec            # AOF同步策略

# 网络优化
tcp-keepalive 60                 # TCP保活
timeout 300                      # 客户端超时

2. 运维优化

bash 复制代码
# 操作系统优化
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo 1 > /proc/sys/vm/overcommit_memory
echo 511 > /proc/sys/net/core/somaxconn

# 文件描述符限制
ulimit -n 65535

# 内存分配
echo vm.swappiness=1 >> /etc/sysctl.conf

3. 应用层优化

bash 复制代码
# 连接池配置
max_connections=20               # 最大连接数
min_idle_connections=5           # 最小空闲连接
max_idle_time=300               # 最大空闲时间

# 命令优化
# 使用PIPELINE批量操作
# 避免KEYS命令,使用SCAN替代
# 合理设置TTL,避免内存泄漏
# 使用合适的数据结构

故障排查流程图

  1. 问题发现 → 监控告警或用户反馈
  2. 初步判断 → 查看基本信息和日志
  3. 定位问题 → 使用相应诊断命令
  4. 分析原因 → 结合监控数据分析
  5. 制定方案 → 选择合适的解决方案
  6. 执行处理 → 谨慎执行修复操作
  7. 验证效果 → 确认问题已解决
  8. 总结优化 → 防止问题再次发生

联系方式与备注

使用说明:

  • 生产环境执行命令前务必谨慎评估影响
  • MONITOR、KEYS等命令会影响性能,请在业务低峰期使用
  • 重要操作前建议先备份数据
  • 配置修改建议先在测试环境验证

更新时间: 2024年最新版本
适用版本: Redis 5.0+ (部分命令需要更高版本)

相关推荐
IT大白鼠3 天前
Redis 系列 · 第 01 篇——认知入门:Redis 是什么
redis·nosql
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
lbb 小魔仙3 天前
OpenClaw + cpolar 实战:远程 NAS、分享小游戏、RDP,再配置公网 AI 入口
数据库·人工智能·redis·oracle·prometheus
夕除3 天前
redis--018
redis
两锭子3 天前
Redis基础
redis
烟沙九洲3 天前
Redis 缓存穿透、缓存击穿、缓存雪崩
数据库·redis
字节探索3 天前
Redis 只会当缓存用?这 10 大实战场景,让你的系统快到飞起
redis·后端
于樱花森上飞舞3 天前
【Redis】哨兵详解
java·开发语言·数据库·redis
Rain的Java大神之路4 天前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog4 天前
Java 接入Redis: 通用命令与键管理
java·服务器·redis