首页主机资讯Linux下Redis如何调优

Linux下Redis如何调优

时间2026-01-15 13:22:21发布访客分类主机资讯浏览513
导读:Linux下Redis调优实战指南 一 系统层关键调优 内存分配策略:设置 vm.overcommit_memory=1,避免 bgsave/bgrewriteaof 在低内存时因 fork 失败(日志提示 “Background sav...

Linux下Redis调优实战指南

一 系统层关键调优

  • 内存分配策略:设置 vm.overcommit_memory=1,避免 bgsave/bgrewriteaof 在低内存时因 fork 失败(日志提示 “Background save may fail …”)。临时生效:sysctl vm.overcommit_memory=1;永久生效:写入 /etc/sysctl.confsysctl -p
  • 交换倾向:将 vm.swappiness 调低以减少 swap 对延迟的影响。建议:Linux ≥ 3.5 设为 1Linux < 3.5 设为 0;临时:echo 1 > /proc/sys/vm/swappiness;永久:写入 /etc/sysctl.conf。监控:free -mvmstat 1si/so,以及 /proc/< pid> /smapsSwap 字段定位进程是否发生换入换出。
  • 透明大页 THP:Redis 建议禁用,降低 fork 后页复制与写放大带来的延迟抖动。执行:echo never > /sys/kernel/mm/transparent_hugepage/enabled(部分发行版路径为 /sys/kernel/mm/redhat_transparent_hugepage/enabled),并加入开机自启;修改后需重启 Redis。
  • 文件描述符限制:确保 ulimit -n 足够大,避免 maxclients 被系统限制。Redis 计算所需文件描述符为:maxclients + 32(内部使用约 32 个 fd);若不足,调大系统或服务级限制后再设置 maxclients
  • TCP 与网络:适度增大 somaxconn(全连接队列)与 tcp_max_syn_backlog(半连接队列),并开启 tcp_tw_reuse / tcp_tw_recycle(按内核与云厂商建议),降低连接建立/回收阶段的排队与 TIME_WAIT 影响;在高并发短连接场景收益明显。

二 Redis内存与持久化配置

  • 内存上限与淘汰策略:设置 maxmemory 并选择匹配业务的 maxmemory-policy。通用建议:数据可过期用 allkeys-lruvolatile-ttl;严禁 OOM 时用 noeviction。若开启持久化,建议为 fork/重写 预留空间:开启 RDB/AOF 时可将 maxmemory ≈ 物理内存的 45%;仅缓存且关闭持久化时可放宽,但应避免触发 swap。
  • RDB 快照:通过 save < seconds> < changes> 控制触发频率,避免过密导致 I/O 抖动;合理设置 stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yes;快照基于 fork + Copy-on-Write,大数据集 fork 可能短时阻塞,建议错峰与资源预留。
  • AOF 日志:开启 appendonly yes,按一致性/性能权衡选择 appendfsynceverysec 为通用折衷;always 最安全但吞吐最低;no 性能最好但风险最高。配置自动重写 auto-aof-rewrite-percentageauto-aof-rewrite-min-size,在业务低峰执行重写控制体积增长。

三 典型场景参数建议

场景 系统层 Redis 层
缓存(允许少量丢失、极致吞吐) swappiness 低(如 1),必要时开启 THP never maxmemory 可较高;maxmemory-policyallkeys-lruvolatile-ttl;持久化可按需关闭或仅 RDB、低频
高可靠(少丢数据、可恢复) 预留内存与 I/O,确保 overcommit_memory=1 开启 AOF everysec + RDB 低频 的混合策略;合理 auto-aof-rewrite-*stop-writes-on-bgsave-error yes
大写入/大 Key 值 监控 si/so 与慢查询,避免 swap 与阻塞 控制 key/value 大小pipeline 批量;必要时分片/集群分散压力
说明:上表为落地起点,需结合压测与监控微调阈值与频率。

四 监控与排障要点

  • 关键指标与命令:Redis 侧用 INFO memory 观察 used_memory / used_memory_rss / mem_fragmentation_ratioINFO persistence 关注 **last_bgsave_status / aof_last_rewrite_time / aof_pending_rewriteSLOWLOG 捕获慢命令;CLIENT LIST查看连接与阻塞。系统侧用free -mvmstat 1/proc//smaps` 观察 swap 与内存压力。
  • 常见症状与处置:出现 swap 抖动(si/so > 0) 时,优先降低业务写入峰值、调低 swappiness、检查 maxmemory 与淘汰策略是否触发频繁;出现 bgsave 失败 / “Cannot allocate memory” 时,确认 overcommit_memory=1、是否有足够空闲内存与 I/O 带宽;出现 THP 相关慢查询 时,确认已禁用 THP 并重启 Redis。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux下Redis如何调优
本文地址: https://pptw.com/jishu/779990.html
如何实现Redis高可用 怎样优化Redis连接数

游客 回复需填写必要信息