Ubuntu Redis如何监控与调优
导读:Ubuntu 上 Redis 的监控与调优指南 一 监控体系与关键指标 内置与命令行 使用 INFO 获取全量指标,关注: 内存:used_memory、used_memory_rss、mem_fragmentation_ratio(...
Ubuntu 上 Redis 的监控与调优指南
一 监控体系与关键指标
- 内置与命令行
- 使用 INFO 获取全量指标,关注:
- 内存:used_memory、used_memory_rss、mem_fragmentation_ratio(碎片率)、maxmemory 与 maxmemory_policy。
- 持久化:rdb_last_save_time、rdb_changes_since_last_save、aof_enabled、aof_last_rewrite_time、aof_last_bgrewrite_status。
- 命令与延迟:total_commands_processed、instantaneous_ops_per_sec、latest_fork_usec、slowlog_len。
- 客户端与复制:connected_clients、blocked_clients、rejected_connections、master_link_status。
- 实时与统计:
- redis-cli --stat 观察 QPS、内存、连接数变化。
- SLOWLOG GET 定位慢查询;MONITOR(仅调试)观察实时命令流。
- 使用 INFO 获取全量指标,关注:
- 系统与可视化
- 系统层:用 htop/top、vmstat、iostat 观察 CPU、内存、磁盘 I/O;关注 used_cpu_sys、used_cpu_user(INFO 输出)判断 Redis CPU 压力。
- 可视化:RedisInsight(Docker 运行,浏览器访问 8001 端口)做实时监控、数据浏览与诊断;也可选用 Redis Desktop Manager 等 GUI 工具。
二 配置与系统层面的关键调优
- 内存与淘汰
- 设置 maxmemory < 容量> (如 70%–80% 物理内存),根据业务选择 maxmemory-policy(如 allkeys-lru、volatile-lru),避免 OOM 与频繁淘汰抖动。
- 持久化策略
- 建议 AOF + RDB 组合:AOF 采用 appendfsync everysec 平衡性能与数据安全;RDB 用于快速恢复与备份。大数据量场景注意 AOF 重写 与 RDB 快照 对延迟的影响,可通过调整重写阈值与时机、在低峰期执行来降低干扰。
- 网络与连接
- 开启 tcp-keepalive 300 检测死连接;按需调整 timeout 回收空闲连接;提高 tcp-backlog(如 512–1024)以容纳突发连接;用 bind / 防火墙 限制来源 IP,避免暴露在公网。
- 客户端与协议
- 客户端启用 连接池、合理设置最大/最小空闲连接;尽量使用 Pipeline/MGET/MSET 减少 RTT;避免在生产使用 **KEYS ***、全量 SCAN 等耗时命令。
- 系统内核与资源
- 适度提升 net.core.somaxconn 以匹配高并发连接队列;使用 SSD 降低 AOF/RDB 的 I/O 延迟;确保 内存与 CPU 资源充足并预留余量。
三 常见性能问题与对策
- 大 Key / 热 Key
- 现象:单键过大(如大 Hash/List)导致阻塞、带宽尖峰、迁移困难。
- 对策:拆分为多个子键、使用 Hash/ZipList 编码 优化小对象、对热 Key 做本地缓存或分片打散。
- 慢查询与阻塞命令
- 现象:*SORT/ZUNIONSTORE/KEYS /FLUSHALL 等引发延迟飙升。
- 对策:用 SLOWLOG 定位,替换为高效命令(如 SCAN 替代 **KEYS ***),将计算下沉到客户端,必要时对大操作限流/分批执行。
- 持久化引发的抖动
- 现象:BGSAVE/BGREWRITEAOF 期间延迟上升、fork 耗时大。
- 对策:选择 everysec 的 AOF 同步策略,合理设置 auto-aof-rewrite-percentage / auto-aof-rewrite-min-size,在业务低峰触发重写,必要时阶段性关闭 RDB 仅用 AOF(权衡数据安全)。
- 内存碎片
- 现象:mem_fragmentation_ratio 明显偏离 1.0,RSS 高于 used_memory 较多。
- 对策:升级到较新的 jemalloc/tcmalloc,必要时在低峰滚动重启实例,结合数据分片与合理淘汰策略降低碎片累积。
- 连接风暴与资源耗尽
- 现象:connected_clients 激增、rejected_connections 出现。
- 对策:客户端使用 连接池 复用连接,限制最大连接数;服务端适当提升 maxclients 与 backlog;用 timeout 清理空闲连接。
四 快速巡检与优化清单
- 基线采集
- 记录 INFO all 的关键项(内存、持久化、命中率、慢日志数量、客户端数、fork 耗时),保存为基线;部署 RedisInsight 或 redis-cli --stat 做持续观测。
- 配置优化
- 设置 maxmemory 与 maxmemory-policy;开启 appendonly yes / appendfsync everysec;按需配置 save 策略;设置 timeout / tcp-keepalive / bind / requirepass;将 supervised systemd 以便 systemd 管理。
- 系统加固与资源
- 用 ufw/firewalld 限制来源 IP;提升 net.core.somaxconn;使用 SSD;确保 内存/CPU 余量并监控告警。
- 客户端与命令
- 启用 连接池、使用 Pipeline/MGET/MSET、避免 **KEYS *** 与长耗时命令;对大 Key/热 Key 进行拆分与缓存。
五 一键命令示例
- 安装与基础
- 安装:sudo apt update & & sudo apt install redis-server -y
- 连接与探活:redis-cli PING;redis-cli INFO memory
- 实时统计:redis-cli –stat
- 慢查询:redis-cli SLOWLOG GET 10
- 可视化
- Docker 运行 RedisInsight:docker run -d -p 8001:8001 --name redisinsight redislabs/redisinsight
- 系统参数(示例)
- 提升连接队列:echo “net.core.somaxconn=1024” | sudo tee -a /etc/sysctl.conf & & sudo sysctl -p
- 配置热加载
- 修改 /etc/redis/redis.conf 后:sudo systemctl reload redis-server(或 restart)
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Redis如何监控与调优
本文地址: https://pptw.com/jishu/751020.html
