在Ubuntu上关闭透明大页(转)
在 Ubuntu 上关闭透明大页(Transparent HugePages, THP)主要有两种方法:临时关闭(重启后失效)和永久关闭。下面我为你详细说明操作步骤,并补充一些注意事项。
透明大页(THP)管理指南
🔧 1. 检查当前 THP 状态
在开始操作前,建议先检查一下当前系统的 THP 状态。打开终端,输入以下命令:
cat /sys/kernel/mm/transparent_hugepage/enabled |
如果输出中包含 [always] 或 [madvise],表示 THP 处于启用状态;如果显示 always madvise [never],则表示 THP 已被禁用。
⚡ 2. 临时关闭 THP(重启后失效)
如果只是想立即关闭 THP 进行测试,可以使用以下命令:
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled |
注意:这种方法只在当前运行 session 中有效,服务器或电脑重启后 THP 又会重新启用。
🔒 3. 永久关闭 THP
以下两种方法可以实现永久关闭,推荐使用第一种(修改 GRUB),因为它更通用和标准。
方法一:通过修改 GRUB 配置(推荐)
- 编辑 GRUB 配置文件:
sudo nano /etc/default/grub
- 找到 GRUB_CMDLINE_LINUX_DEFAULT 或 GRUB_CMDLINE_LINUX 行,在其引号内的参数中添加 transparent_hugepage=never。例如:如果还需要关闭 NUMA(在某些数据库场景下建议),可以一并添加 numa=off。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash transparent_hugepage=never"
# 或者
GRUB_CMDLINE_LINUX="transparent_hugepage=never" - 保存文件后,更新 GRUB:
sudo update-grub
- 重启系统:
sudo reboot
方法二:通过 systemd 服务或 rc.local(备用方案)
某些特定应用(如 MongoDB)会推荐使用此方法。
- 创建一个 systemd 服务文件(例如 /etc/systemd/system/disable-thp.service):你也可以选择使用 rc.local(如果系统支持):
[Unit]
Description=Disable Transparent Huge Pages (THP)
After=sysinit.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag'
[Install]
WantedBy=basic.target
编辑 /etc/rc.local 文件(如果没有则创建),在 exit 0 这一行之前添加:if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
```[citation:5]
并确保 `rc.local` 文件有可执行权限。
2. 启用并启动服务(如果使用 systemd 方式):
```bash
sudo systemctl daemon-reload
sudo systemctl enable disable-thp.service
sudo systemctl start disable-thp.service - 重启系统以确保更改生效。
✅ 4. 验证关闭状态
重启后,再次运行检查命令:
cat /sys/kernel/mm/transparent_hugepage/enabled |
如果成功,输出应显示为 always madvise [never],表明 THP 已被禁用。
⚠️ 4. 注意事项
· 为什么关闭 THP:THP 旨在自动管理大内存页,但某些应用(如 Oracle数据库、MongoDB、Redis、Hadoop 等)已知与其存在兼容性问题,可能导致性能下降、内存延迟或异常开销。关闭 THP 可以避免这些潜在问题。
· 性能权衡:对于某些其他工作负载,THP 可能有益。除非你遇到特定问题或有应用明确要求,否则无需禁用。通常只有在运行上述特定企业级软件时才建议关闭。
· 关闭 Defrag:建议同时将 enabled 和 defrag 都设置为 never。
· NUMA:在某些数据库应用场景中,有时会建议同时关闭 NUMA(numa=off),但这与 THP 是独立的配置,请根据你的具体软件建议决定。
💎 总结
关闭 Ubuntu 的透明大页并不复杂。通常而言,修改 GRUB 配置是最常用且一劳永逸的方法。完成操作后,务必重启系统并验证状态。
如果你在操作过程中遇到任何问题,或者想知道更多关于你的特定应用为何需要关闭 THP 的细节,我很乐意提供进一步帮助。