admin

redis修复 overcommit_memory 警告-禁用THP

admin 运维服务 2025-05-30 812浏览 0

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 1:M 30 May 2025 14:18:16.143 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

解决方案分两步:

1. 修复 overcommit_memory 警告

 临时生效(立即生效,重启失效)sudo sysctl vm.overcommit_memory=1
# 永久生效(需重启系统或重新加载配置)
echo "vm.overcommit_memory = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p  # 重新加载配置(无需重启)

2. 禁用 Transparent Huge Pages (THP)

临时禁用 THP(立即生效,重启失效)
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
# 永久禁用 THP(需重启系统)
sudo tee /etc/systemd/system/disable-thp.service <<EOF
[Unit]
Description=Disable Transparent Huge Pages (THP)

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"

[Install]
WantedBy=multi-user.target
EOF
# 启用服务并重启sudo systemctl daemon-reload
sudo systemctl enable disable-thp
sudo systemctl start disable-thp

验证是否生效:

# 检查 overcommit_memory
cat /proc/sys/vm/overcommit_memory  
# 输出应为 1
# 检查 THP 状态

cat /sys/kernel/mm/transparent_hugepage/enabled  # 输出应有 [never]

注意事项:

  1. 操作对象是宿主机
    以上命令需在运行 Docker 的宿主机上执行,而非 Redis 容器内部。

  2. 重启 Redis 容器
    修改后重启 Redis 容器使配置生效:

    bashbash复制bash复制docker-compose restart redis
  3. 无需修改 Docker Compose 文件
    此方案直接修复宿主机内核参数,无需调整容器配置。


为什么需要这样做?

  • **overcommit_memory=1**:允许系统在内存不足时仍分配内存,避免 Redis 后台保存(BGSAVE)失败。

  • 禁用 THP:THP 会导致 Redis 出现高延迟和内存占用问题,禁用后可提升性能。


版权声明

本站《作品展示》类文章均为原创,转载必须注明出处,技术分享类文章部分来源于网络,版权归原作者所有,若侵权请留言。