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。

相关推荐
码云数智-园园8 分钟前
坚如磐石:数据库事务ACID特性的实现奥秘
数据库·oracle
十月南城12 分钟前
文档化与知识库方法——ADR、Runbook与故障手册的结构与维护节奏
大数据·数据库
qq_4176950513 分钟前
实战:用Python开发一个简单的区块链
jvm·数据库·python
jianqiang.xue18 分钟前
ESP32-S3 运行 Linux 全指南:从 RISC-V 模拟器移植到 8 秒快速启动
linux·stm32·单片机·mongodb·risc-v·esp32s3
悲伤小伞30 分钟前
9-MySQL_索引
linux·数据库·c++·mysql·centos
霖霖总总36 分钟前
[Redis小技巧24]Redis主从复制深度解剖:不只是SLAVEOF,Redis主从复制背后的RunID、Backlog
数据库·redis
不吃香菜学java1 小时前
苍穹外卖-菜品分页查询
数据库·spring boot·tomcat·log4j·maven·mybatis
狼与自由1 小时前
Redis 分布式锁
数据库·redis·分布式
skiy1 小时前
redis 使用
数据库·redis·缓存
mygljx1 小时前
Redis 下载与安装 教程 windows版
数据库·windows·redis