# 在Ubuntu上关闭透明大页（转)

在 Ubuntu 上关闭透明大页（Transparent HugePages, THP）主要有两种方法：临时关闭（重启后失效）和永久关闭。下面我为你详细说明操作步骤，并补充一些注意事项。 透明大页（THP）管理指南 🔧 1. 检查当前 THP 状态 在开始操作前，建议先

在 Ubuntu 上关闭透明大页（Transparent HugePages, THP）主要有两种方法：临时关闭（重启后失效）和永久关闭。下面我为你详细说明操作步骤，并补充一些注意事项。

透明大页（THP）管理指南

🔧 1. 检查当前 THP 状态

在开始操作前，建议先检查一下当前系统的 THP 状态。打开终端，输入以下命令：

```bash
cat /sys/kernel/mm/transparent_hugepage/enabled
```

如果输出中包含 [always] 或 [madvise]，表示 THP 处于启用状态；如果显示 always madvise [never]，则表示 THP 已被禁用。

⚡ 2. 临时关闭 THP（重启后失效）

如果只是想立即关闭 THP 进行测试，可以使用以下命令：

```bash
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag  # 建议同时也关闭碎片整理
```

注意：这种方法只在当前运行 session 中有效，服务器或电脑重启后 THP 又会重新启用。

🔒 3. 永久关闭 THP

以下两种方法可以实现永久关闭，推荐使用第一种（修改 GRUB），因为它更通用和标准。

方法一：通过修改 GRUB 配置（推荐）

1. 编辑 GRUB 配置文件：
   ```bash
   sudo nano /etc/default/grub
   ```
2. 找到 GRUB_CMDLINE_LINUX_DEFAULT 或 GRUB_CMDLINE_LINUX 行，在其引号内的参数中添加 transparent_hugepage=never。例如：
   ```bash
   GRUB_CMDLINE_LINUX_DEFAULT="quiet splash transparent_hugepage=never"
   # 或者
   GRUB_CMDLINE_LINUX="transparent_hugepage=never"
   ```
   如果还需要关闭 NUMA（在某些数据库场景下建议），可以一并添加 numa=off。
3. 保存文件后，更新 GRUB：
   ```bash
   sudo update-grub
   ```
4. 重启系统：
   ```bash
   sudo reboot
   ```

方法二：通过 systemd 服务或 rc.local（备用方案）

某些特定应用（如 MongoDB）会推荐使用此方法。

1. 创建一个 systemd 服务文件（例如 /etc/systemd/system/disable-thp.service）：
   ```ini
   [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
   ```
   你也可以选择使用 rc.local（如果系统支持）：
   编辑 /etc/rc.local 文件（如果没有则创建），在 exit 0 这一行之前添加：
   ```bash
   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
   ```
3. 重启系统以确保更改生效。

✅ 4. 验证关闭状态

重启后，再次运行检查命令：

```bash
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 的细节，我很乐意提供进一步帮助。