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。

相关推荐
程序猿_极客5 小时前
MySQL 从入门到实战:DQL 查询语言详解(附案例 + 练习)
数据库·mysql·mysql入门
无奈笑天下7 小时前
银河麒麟桌面OS使用分区编辑器将/backup分区删除并扩容至根分区参考教程
linux·数据库·经验分享·编辑器
tzhou6445213 小时前
MySQL备份与恢复
数据库·mysql·adb
一过菜只因13 小时前
MySql Jdbc
android·数据库·mysql
思成不止于此14 小时前
MySQL 查询实战(三):排序与综合练习
数据库·笔记·学习·mysql
茅坑的小石头14 小时前
数据库表设计,概念模型、逻辑模型、物理模型的区别,目标、主要内容、所处阶段、面向人群,数据库无关性
数据库
tebukaopu14814 小时前
mysql数据备份还原
数据库·mysql
zyxqyy&∞14 小时前
mysql代码小练-2
数据库·mysql
JIngJaneIL15 小时前
基于Java非遗传承文化管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot