MongoDB性能调优之--关闭THP

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。

相关推荐
名不经传的养虾人2 分钟前
从0到1:企业级AI项目迭代日记 Vol.41|多租户不是一个功能,是一次手术
服务器·数据库·系统架构·ai编程·ai工作流·企业ai
艾莉丝努力练剑10 分钟前
【QT】窗口
运维·网络·数据库·qt·计算机网络·microsoft
元拓数智22 分钟前
跨库NL2SQL可信落地的核心:用IntaLink破解数据关系“迷雾”
数据库·人工智能·ai·nlp·agent·llama
worilb27 分钟前
Spring Cloud 学习与实践(6):Nacos 配置中心
数据库·学习·spring cloud
lld95102728 分钟前
(三)本地策略框架
java·服务器·数据库
scan72430 分钟前
根据context={“query_type“: “vip“} 进行选择
数据库
Solis程序员35 分钟前
亿级流量下的 Redis 计数系统设计:位图事实 + 事件聚合 + SDS 汇总
数据库·redis·缓存
专注VB编程开发20年36 分钟前
C#,VB.NET 生成debug日志文件
服务器·数据库·c#
basketball61639 分钟前
Redis基础:4. 事务
数据库·redis·缓存
zzz_236841 分钟前
【Redis】缓存策略与三大经典问题
数据库·redis·缓存