只要就非常有必要开机永久关闭透明大页 (THP),不只是 Redis 卡顿,还会拖累 rsync 镜像同步、拉高机械硬盘 IO‑wait

一、先说它为什么会拖累 Redis

Redis 做 RDB 持久化、AOF 重写时会调用 fork() 创建子进程,采用写时复制 COW机制:

  • 普通 4KB 内存页:改动 1 个字节,仅复制 4KB 内存;

  • 开启透明大页(默认 2MB 一页):只要修改 1 字节,内核就要复制完整 2MB 内存,内存拷贝量暴涨 512 倍

    后果:

  1. Redis 持久化瞬间内存暴涨、出现卡顿、延迟抖动;

  2. 大量内存拷贝引发内核内存整理,后台内存碎片整理线程会抢占 CPU、触发磁盘脏页回写,拉高机械硬盘 IO 负载,和你的 rsync 同步争抢硬盘带宽。

    Redis 官方生产环境硬性标准:必须关闭 THPRedis

二、它同样会影响镜像同步任务

THP 后台会不停扫描内存、合并大内存页、整理内存碎片;

内存整理期间内核会强制刷脏页到磁盘,你的机械硬盘本来性能弱,就会出现 IO 周期性卡顿、iowait 忽高忽低,rsync 同步容易超时、任务失败。

三、两种关闭模式区别

  1. always:全程强制启用大页(数据库大忌)

  2. madvise:仅程序主动申请才启用,Redis 依旧会触发 COW 开销

  3. never:彻底关闭透明大页,数据库最优方案

四、完整开机自启配置

  1. 编辑开机启动脚本

sudo nano /etc/rc.local

shitou@shitou:~/redis-7.2.5$ sudo cat /etc/rc.local

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/transparent_hugepage/defrag

shitou@shitou:~/redis-7.2.5$

 sudo chmod +x /etc/rc.local

shitou@shitou:~/redis-7.2.5$

后续需要启动 K8s,严格按这个顺序

bash

# 1.容器引擎先启动
systemctl start docker
# 2.再开启k8s节点代理
systemctl start kubelet
# 3.之后Nginx、镜像同步服务
systemctl start nginx
systemctl start tunasync-manager
systemctl start tunasync-worker
屏幕截图 2026-08-10 025022.png