THP全称:Transparent Hugepages,中文翻译为透明大页。
透明大页 (THP) 是一种Linux内存管理系统,可减少转换后备缓冲区 (TLB) 查找的开销。 THP 通过组合小页面并使其在应用程序中显示为较大的内存页面来实现此目的。
但是,在Linux上运行MongoDB 7.0或更早版本时,应禁用 THP以获得最佳性能。 在MongoDB的早期版本中,启用 THP 后,数据库工作负载的性能通常会下降,因为它们经常使用非连续的内存访问权限模式。
注意,从MongoDB 8.0开始, MongoDB使用 TCMalloc 的升级版本,可通过启用透明大页来提高性能。此版本使用每 个CPU 缓存而不是每个线程缓存,以减少内存碎片,并使数据库对高压工作负载更有弹性。所以,在做THP优化之前,需要先确认下当前使用的MongoDB的版本。
这些信息在官网上都能查到,点此查看。以下是截图,框起来的部分,就是上面描述的内容:

下面,通过创建服务文件来禁用THP服务。
注意:THP 在系统级别运行,因此适用于系统下的所有进程,无法按照进程级别来启用或禁用 THP。
1、创建systemd单元文件
复制以下内容并将其保存在 /etc/systemd/system/disable-transparent-huge-pages.service 中:
bash
[Unit]
Description=Disable Transparent Huge Pages (THP)
After=sysinit.target local-fs.target
Before=mongod.service
[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
StandardOutput=journal
[Install]
WantedBy=multi-user.target
注意:/sys/kernel/mm/redhat_transparent_hugepage/enabled 该路径可能和系统的版本有关系,因此,请检查下该路径文件是否存在,如有不同,记得更改为正确的路径。
2、重新加载systemd服务
运行以下命令:
bash
sudo systemctl daemon-reload
3、启动服务
运行:
bash
sudo systemctl start disable-transparent-huge-pages
要验证相关的 THP 设置是否已更改,有两种方式:
a、查看相关文件,比如:
bash
cat /sys/kernel/mm/transparent_hugepage/enabled && \
cat /sys/kernel/mm/transparent_hugepage/defrag
如果启动成功,输出应如下所示:
bash
never
never
b、如果MongoDB的版本<=4.4,不禁用THP,则在启动日志里面会有如下打印:
bash
{"t":{"$date":"2025-12-08T16:37:20.604+08:00"},"s":"W", "c":"CONTROL", "id":22178, "ctx":"initandlisten","msg":"/sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'","tags":["startupWarnings"]}
{"t":{"$date":"2025-12-08T16:37:20.604+08:00"},"s":"W", "c":"CONTROL", "id":22181, "ctx":"initandlisten","msg":"/sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'","tags":["startupWarnings"]}
如果禁用成功,则这两条warning信息将不会出现。
4、配置随操作系统启动
运行以下命令:
bash
sudo systemctl enable disable-transparent-huge-pages
因为系统默认情况下就是开启的,所以就这里就不再赘述了,有需要的同学,可参考官网来开启THP。