

Transparent Huge Pages(透明大页)是 Linux 内核的内存管理特性,但 Redis 对内存页大小非常敏感,THP 会导致:
- Redis 内存分配 / 释放的延迟增加(毫秒级 → 秒级)
- 内存碎片率升高,占用更多物理内存
- 高并发场景下性能波动明显
1、临时禁用 THP(立即生效,无需重启系统)
执行以下命令(必须用 root 用户):
1. 临时禁用 THP(立即生效)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag # 顺带禁用碎片整理
2. 验证是否禁用成功(返回 [never] 则生效)
cat /sys/kernel/mm/transparent_hugepage/enabled
会输出结果:always madvise [never]
2、永久禁用 THP(CentOS 8.5 专属,替代 rc.local)
CentOS 8.5 不再默认启用 rc.local,需通过 systemd 服务实现开机自启禁用 THP:
cat > /etc/systemd/system/disable-thp.service << EOF
[Unit]
Description=Disable Transparent Huge Pages (THP) for Redis
Before=redis.service # 确保在Redis启动前执行
DefaultDependencies=no
After=sysinit.target local-fs.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag"
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
启用并启动该服务
1. 重新加载 systemd 配置
systemctl daemon-reload
2. 设置开机自启
systemctl enable disable-thp.service
3. 立即启动(验证是否生效)
systemctl start disable-thp.service
4. 检查服务状态(显示 active (exited) 则正常)
systemctl status disable-thp.service
5. 重启系统后验证 THP 状态
reboot ---重启系统,注意!!!
cat /sys/kernel/mm/transparent_hugepage/enabled
6. 查看 Redis 启动日志(无 THP 警告)
tail -f /var/log/redis/redis-server.log