在京东云服务器(或其他云环境)上部署 Redis 集群时,为了提升性能、稳定性和安全性,通常需要对 Linux 内核参数进行适当调整。以下是推荐调整的关键内核参数及其说明:
一、内存相关参数
1. vm.overcommit_memory
vm.overcommit_memory = 1
- 说明:Redis 在 fork 子进程进行 RDB 持久化时会使用
copy-on-write,若内存不足可能导致Cannot allocate memory错误。 - 设置为
1表示允许内存超额分配,避免因内存检查严格导致 fork 失败。 - 推荐值:
1
2. vm.swappiness
vm.swappiness = 1
- 说明:控制内核使用 swap 的倾向。Redis 是内存数据库,应尽量避免使用 swap,否则性能急剧下降。
- 建议设置为
1,仅在极端内存压力下使用 swap。 - 推荐值:
0或1
3. overcommit_ratio(可选)
vm.overcommit_ratio = 80
- 配合
vm.overcommit_memory=2使用,但在 Redis 场景中通常使用overcommit_memory=1,可不调整。
二、网络相关参数
1. net.core.somaxconn
net.core.somaxconn = 65535
- 说明:TCP 连接队列的最大长度。Redis 默认监听队列长度为 511,若并发连接高,需调大此值。
- 同时需在 Redis 配置中设置
tcp-backlog 65535。
2. net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_max_syn_backlog = 65535
- SYN 队列长度,用于应对突发连接请求。
3. net.core.netdev_max_backlog
net.core.netdev_max_backlog = 5000
- 每个网络接口接收队列的最大数据包数,防止网络突发时丢包。
4. net.ipv4.tcp_tw_reuse 和 tcp_tw_recycle(注意:tcp_tw_recycle 已废弃)
net.ipv4.tcp_tw_reuse = 1
# net.ipv4.tcp_tw_recycle = 0 # 禁用(在 NAT 环境下有问题)
- 启用
tcp_tw_reuse可快速复用 TIME_WAIT 状态的连接,适合高并发短连接场景。
5. net.ipv4.tcp_keepalive_time
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
- 调整 TCP 心跳探测时间,更快发现断开的连接,避免 Redis 长时间等待。
三、文件句柄与系统限制
1. 文件句柄限制(ulimit)
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
redis soft nofile 65535
redis hard nofile 65535
- Redis 集群节点可能需要处理大量客户端连接,需提高文件描述符限制。
2. 系统级文件句柄
fs.file-max = 2097152
- 系统最大打开文件数。
四、透明大页(Transparent Huge Pages, THP)
禁用 THP(必须)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
- 原因:THP 会导致 Redis 延迟抖动(延迟 spikes),严重影响性能。
- 建议在系统启动脚本(如
/etc/rc.local)中加入上述命令,确保开机禁用。
五、其他优化建议
1. 关闭 NUMA(可选)
- 若服务器为 NUMA 架构且 Redis 单实例运行,可考虑:
numactl --interleave=all redis-server - 或在 BIOS 中关闭 NUMA(视情况而定)。
2. I/O 调度器
- 建议使用
deadline或noop(尤其在 SSD 或云盘环境):echo deadline > /sys/block/vda/queue/scheduler
六、Redis 配置配合调整
确保 Redis 配置文件(redis.conf)也做相应优化:
tcp-backlog 65535
timeout 300
tcp-keepalive 60
maxmemory <合理值,如物理内存的 70%~80%>
maxmemory-policy allkeys-lru # 或根据业务选择
save 900 1
save 300 10
save 60 10000
# 关闭保护模式(云环境需注意安全组)
protected-mode no
# 开启集群模式
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
七、应用方式
将上述内核参数写入 /etc/sysctl.conf:
vm.overcommit_memory = 1
vm.swappiness = 1
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
fs.file-max = 2097152
然后执行:
sysctl -p
并设置 ulimit 和禁用 THP。
总结
| 类别 | 参数名 | 推荐值 | 说明 |
|---|---|---|---|
| 内存 | vm.overcommit_memory |
1 | 避免 fork 失败 |
| 内存 | vm.swappiness |
1 | 减少 swap 使用 |
| 内存 | transparent_hugepage |
never |
必须禁用 THP |
| 网络 | net.core.somaxconn |
65535 | 提高连接队列 |
| 网络 | tcp_keepalive_* |
合理值 | 快速检测断连 |
| 文件句柄 | nofile |
65535 | 支持高并发 |
| 系统 | fs.file-max |
2097152 | 系统级限制 |
⚠️ 注意:在京东云等云服务器上操作前,建议备份系统并测试参数影响,避免影响线上服务。
如有使用容器(Docker/K8s),部分参数需在宿主机或容器启动时设置。
云计算导航