Linux下Redis如何调优
导读: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.conf并sysctl -p。 - 交换倾向:将 vm.swappiness 调低以减少 swap 对延迟的影响。建议:Linux ≥ 3.5 设为 1,Linux <
3.5 设为 0;临时:
echo 1 > /proc/sys/vm/swappiness;永久:写入/etc/sysctl.conf。监控:free -m、vmstat 1的 si/so,以及/proc/< pid> /smaps的 Swap 字段定位进程是否发生换入换出。 - 透明大页 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-lru 或 volatile-ttl;严禁 OOM 时用 noeviction。若开启持久化,建议为 fork/重写 预留空间:开启 RDB/AOF 时可将 maxmemory ≈ 物理内存的 45%;仅缓存且关闭持久化时可放宽,但应避免触发 swap。
- RDB 快照:通过
save < seconds> < changes>控制触发频率,避免过密导致 I/O 抖动;合理设置stop-writes-on-bgsave-error yes、rdbcompression yes、rdbchecksum yes;快照基于 fork + Copy-on-Write,大数据集 fork 可能短时阻塞,建议错峰与资源预留。 - AOF 日志:开启
appendonly yes,按一致性/性能权衡选择appendfsync:everysec 为通用折衷;always最安全但吞吐最低;no性能最好但风险最高。配置自动重写auto-aof-rewrite-percentage与auto-aof-rewrite-min-size,在业务低峰执行重写控制体积增长。
三 典型场景参数建议
| 场景 | 系统层 | Redis 层 |
|---|---|---|
| 缓存(允许少量丢失、极致吞吐) | swappiness 低(如 1),必要时开启 THP never | maxmemory 可较高;maxmemory-policy 选 allkeys-lru 或 volatile-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_ratio;INFO persistence关注 **last_bgsave_status / aof_last_rewrite_time / aof_pending_rewrite;SLOWLOG捕获慢命令;CLIENT LIST查看连接与阻塞。系统侧用free -m、vmstat 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
