对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

禁用透明大页 (THP)

透明大页 (THP) 是一种 Linux 内存管理系统。在具有大量内存的计算机上,该系统可以利用较大的内存页面来减少查找转换后备缓冲区 (TLB) 的开销。

然而,在启用 THP 的情况下,数据库工作负载通常性能较差,因为它们往往具有稀疏而不是连续的内存访问模式。在 Linux 上运行 MongoDB 时,应禁用 THP 以获得最佳性能。

为了确保在 mongod 启动之前禁用 THP,您应该为平台的初始化系统创建一个服务文件,以便在启动时禁用 THP。下面提供了针对 systemdSystem V init 初始化系统的说明。

此外,对于使用 ktunetuned 性能配置文件的 RHEL/ CentOS系统,您还必须创建自定义 tuned 配置文件。

若要创建禁用 THP 的服务文件,则需要使用您平台内置的初始化系统。最新版本的 Linux 倾向于使用 systemd(使用systemctl命令),而旧版本的 Linux 倾向于使用 System V init(使用service命令)。有关详细信息,请参阅适用于您的操作系统的文档。

使用适合您平台的初始化系统:

1

创建以下文件并将其保存在 /etc/systemd/system/disable-transparent-huge-pages.service 中:

[Unit]
Description=Disable Transparent Hugepages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo never | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null'
[Install]
WantedBy=basic.target

注意

某些版本的 Red Hat Enterprise Linux(可能还包括基于 Red Hat 的其他衍生产品)对 THP enabled 文件使用不同的路径:

/sys/kernel/mm/redhat_transparent_hugepage/enabled

验证您的系统正在使用哪个路径,并相应地更新 disable-transparent-huge-pages.service 文件。

2

要重新加载 systemd 单元文件并使 disable-transparent-huge-pages.service 可供使用,请运行以下命令:

sudo systemctl daemon-reload
3

运行:

sudo systemctl start disable-transparent-huge-pages

要验证相关的 THP 设置是否已更改,请运行以下命令:

cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag

在 Red Hat Enterprise Linux(可能还包括基于 Red Hat 的其他衍生产品)上,可能需要使用如下命令:

cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag

输出应如下所示:

never
never
4

要确保每次操作系统启动时都应用此设置,请运行以下命令:

sudo systemctl enable disable-transparent-huge-pages
5

如果您在 RHEL/ CentOS上使用 tunedktune 配置文件,则还必须创建自定义 tuned 配置文件。

1

创建以下文件并将其保存在 /etc/init.d/disable-transparent-hugepages 中:

#!/bin/bash
### BEGIN INIT INFO
# Provides: disable-transparent-hugepages
# Required-Start: $local_fs
# Required-Stop:
# X-Start-Before: mongod mongodb-mms-automation-agent
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Disable Linux Transparent Hugepages
# Description: Disable Linux Transparent Hugepages, to improve
# database performance.
### END INIT INFO
case $1 in
start)
if [ -d /sys/kernel/mm/transparent_hugepage ]; then
thp_path=/sys/kernel/mm/transparent_hugepage
elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
thp_path=/sys/kernel/mm/redhat_transparent_hugepage
else
return 0
fi
echo 'never' | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo 'never' | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null
unset thp_path
;;
esac
2

运行:

sudo chmod 755 /etc/init.d/disable-transparent-hugepages
3

运行:

sudo /etc/init.d/disable-transparent-hugepages start

要验证相关的 THP 设置是否已更改,请运行以下命令:

cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag

在 Red Hat Enterprise Linux(可能还包括基于 Red Hat 的其他衍生产品)上,可能需要使用如下命令:

cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag

输出应如下所示:

never
never
4

要确保每次启动操作系统时都应用此设置,请为 Linux 发行版运行以下命令:

分发
命令

Ubuntu 和 Debian

sudo update-rc.d disable-transparent-hugepages defaults

SUSE

sudo insserv /etc/init.d/disable-transparent-hugepages

Red Hat、CentOS、Amazon Linux 和衍生产品

sudo chkconfig --add disable-transparent-hugepages
5

如果您在 RHEL/ CentOS上使用 tunedktune 配置文件,则还必须创建自定义 tuned 配置文件。

重要

如果要使用 tunedktune,那么在创建上述服务文件后您还必须执行本节中的步骤。

tunedktune 是动态内核调优工具,可以影响系统上的透明大页面设置。如果您在运行mongod 时在 RHEL/ CentOS系统上使用 tuned/ktune,则必须创建自定义 tuned 配置文件以确保 THP 保持禁用状态。

1

通过复制相关目录,从现有配置文件创建新配置文件。此示例以 virtual-guest 配置文件为基础,并使用 virtual-guest-no-thp 作为新配置文件:

sudo cp -r /etc/tune-profiles/virtual-guest /etc/tune-profiles/virtual-guest-no-thp
2

编辑 /etc/tune-profiles/virtual-guest-no-thp/ktune.sh 并将 set_transparent_hugepages 设置更改为以下内容:

set_transparent_hugepages never
3

启用新的配置文件:

sudo tuned-adm profile virtual-guest-no-thp
1

创建新目录,以保存自定义的 tuned 配置文件。此示例继承现有的 virtual-guest 配置文件,并使用 virtual-guest-no-thp 作为新配置文件:

sudo mkdir /etc/tuned/virtual-guest-no-thp
2

创建并编辑 /etc/tuned/virtual-guest-no-thp/tuned.conf,以使其包含以下内容:

[main]
include=virtual-guest
[vm]
transparent_hugepages=never

此示例继承现有的 virtual-guest 配置文件。为您的系统选择最合适的配置文件。

3

启用新的配置文件:

sudo tuned-adm profile virtual-guest-no-thp