Docs 菜单
Docs 主页
/
MongoDB Manual
/ / / /

为自管理部署禁用透明大页面 (THP)

在此页面上

  • 创建服务文件
  • 使用 tunedktune

重要

已升级MongoDB 8.0中的 TCMalloc

从MongoDB 8.0开始, MongoDB使用 TCMalloc 的升级版本,可通过启用透明大页来提高性能。 如果您使用的是MongoDB 8.0或更高版本,请参阅启用透明大页面 (THP)。

透明大页 (THP) 是一种Linux内存管理系统,可减少转换后备缓冲区 (TLB) 查找的开销。 THP 通过组合小页面并使其在应用程序中显示为较大的内存页面来实现此目的。

在Linux上运行MongoDB 7.0或更早版本时,应禁用 THP 以获得最佳性能。 在MongoDB的早期版本中,启用 THP 后,数据库工作负载的性能通常会下降,因为它们经常使用非连续的内存访问权限模式。

注意

您可以在系统级别启用THP,并在进程级别禁用 THP。 如果一台计算机上有多个MongoDB进程,请确保8.0版本上的进程启用THP,而7.0或更早版本上的进程禁用 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系统上使用tunedktune ,则必须创建自定义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

后退

TCMalloc 性能