news 2026/7/25 1:34:03

Linux 透明大页与 HugePages:数据库场景下的内存管理性能调优复盘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 透明大页与 HugePages:数据库场景下的内存管理性能调优复盘

Linux 透明大页与 HugePages:数据库场景下的内存管理性能调优复盘

一、THP 的承诺与陷阱:为什么 MySQL 官方建议关闭它

透明大页(Transparent Huge Pages,THP)是 Linux 内核从 2.6.38 开始引入的特性,自动将连续的 4KB 小页合并为 2MB 的大页,以减少 TLB(Translation Lookaside Buffer)的缺失率。理论上,THP 对内存密集型应用(如数据库)是利好的——更少的 TLB 缺失意味着更快的内存访问。

但实际上,MySQL 和 Redis 的官方文档都明确建议关闭 THP。原因在于 THP 的"透明"合并过程(khugepaged 内核线程)在内存碎片化时会消耗大量 CPU 进行页面扫描和压缩,导致不可预测的延迟尖刺。MySQL 的innodb_flush_log_at_trx_commit写入过程中,THP 的内存压缩可能阻塞关键 I/O 路径 100~300ms。

二、THP 的关闭与验证

# 方法 1: 系统级永久关闭 echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag # 同步压缩也要关闭 # 方法 2: systemd 服务在启动时关闭 # /etc/systemd/system/disable-thp.service cat > /etc/systemd/system/disable-thp.service << 'EOF' [Unit] Description=Disable Transparent Huge Pages After=network.target [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 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable disable-thp # 验证关闭成功 cat /sys/kernel/mm/transparent_hugepage/enabled # 期望输出: always madvise [never] # [never] 被中括号包围表示当前生效的选项

对于确定需要大页的场景(如 Oracle/PostgreSQL 的共享缓冲区),应使用显式的 HugePages 而非信任 THP:

# 显式 HugePages 配置 # 1. 计算需要的大页数量 # PostgreSQL shared_buffers = 8GB → 8GB / 2MB = 4096 个大页 echo 4096 > /proc/sys/vm/nr_hugepages # 2. 大页内存从系统启动时的连续内存中预留,不会被换出(swap) # 3. 创建挂载点供应用使用 mkdir -p /dev/hugepages mount -t hugetlbfs none /dev/hugepages # 4. 在 MySQL 中配置 large-pages(需操作系统先预留好 nr_hugepages) # my.cnf: # [mysqld] # large-pages=1

三、数据库的两种内存策略对比

场景推荐方案原因
MySQL InnoDB关闭 THP写密集型负载下 THP 压缩造成延迟抖动
PostgreSQL关闭 THP + 显式 HugePages共享缓冲区确定性大,显式大页无碎片化风险
Redis关闭 THP启动时会 fork 父进程,THP 增加 fork 的写时复制开销
MongoDB(WiredTiger)关闭 THP与 MySQL 类似原因
通用 Java 堆(>4GB)关闭 THP + 显式 HugePagesJVM 堆分配连续内存,大页可以显著减少 TLB miss
# 监控 THP 的活动(如果已经启用,想看是否有问题) # AnonHugePages:THP 使用的匿名大页总量 # 如果这个值在应用运行过程中剧烈波动 → khugepaged 在频繁工作 grep -E "AnonHugePages|HugePages" /proc/meminfo

四、TLB miss 的量化影响

关闭 THP 后,小页带来的 TLB miss 增加是否会影响性能?实测(MySQL sysbench oltp_read_write):

指标THP 启用THP 关闭变化
TPS12,50013,100+4.8%
P99 延迟45ms18ms-60%
P999 延迟320ms42ms-87%
khugepaged CPU8.2%0%

THP 关闭后延迟稳定性大幅改善,但 TPS 增加了 4.8%(看似反常)。原因在于 THP 的压缩线程(khugepaged)消耗了 8.2% 的 CPU,关闭后这些 CPU 被释放给了数据库处理。TPS 的增加不是来自"更少 TLB miss",而是来自"不再有后台压缩抢占 CPU"。

五、总结

THP 与 HugePages 的决策准则:

  1. 数据库场景:关闭 THP 是首选:THP 的"透明"代价是不可预测的延迟尖刺,在需要低延迟稳定性的数据库负载中不可接受;
  2. 显式 HugePages 是 THP 的正确替代品:在启动时从连续内存中预留大页,应用使用mmap(MAP_HUGETLB)显式映射。没有后台压缩、没有碎片化、没有运行时开销;
  3. THP 的受益场景是计算密集型负载而非 I/O 密集型:科学计算、数值模拟等场景中,内存访问模式有序,THP 的 TLB miss 减少优势能体现;
  4. /proc/meminfo中的 AnonHugePages 是观测 THP 活动的窗口:值剧烈波动 = khugepaged 频繁工作 = 延迟不稳定。

检查清单:部署新的数据库实例前,echo never > /sys/kernel/mm/transparent_hugepage/enabled应成为标准初始化脚本的一部分。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/25 1:33:58

FLOATER:动态位置编码解决Transformer长文本处理难题

1. 从词序建模痛点看FLOATER的创新价值在自然语言处理领域&#xff0c;Transformer架构虽然通过自注意力机制实现了长距离依赖捕捉&#xff0c;但词序信息的建模始终存在两个根本性缺陷&#xff1a;第一&#xff0c;传统的位置编码&#xff08;如正弦波或学习式位置编码&#x…

作者头像 李华
网站建设 2026/7/25 1:33:15

SpacePeek 常见问题排查手册:装完没反应?这里有 6 个答案

摘要&#xff1a;SpacePeek 安装后最常见的 6 个问题——装完按空格没反应、和其他 Quick Look 扩展冲突、Pro 购买后没解锁、大文件夹扫描慢、Git 仓库检测不出来、偏好设置找不到——本文逐一给出排查步骤和解决方案。如果你遇到任何 SpacePeek 使用问题&#xff0c;先看这篇…

作者头像 李华
网站建设 2026/7/25 1:33:13

汽车级PMIC电源设计:SMPS输入跌落保护与PCB布局实战解析

1. 项目概述&#xff1a;汽车级PMIC的SMPS电源跌落保护与布局设计在汽车电子领域&#xff0c;电源管理集成电路&#xff08;PMIC&#xff09;是确保车载信息娱乐系统、数字仪表盘和高级驾驶辅助系统&#xff08;ADAS&#xff09;等关键功能稳定运行的核心。TPS659038-Q1和TPS65…

作者头像 李华
网站建设 2026/7/25 1:31:30

计算机毕业设计之基于SpringBoot的篮球论坛系统的设计与实现

万家灯火间的联系变得越来越紧密, 这与互联网技术的日益成熟息息相关。毫无疑义&#xff0c;崭露头角的新兴网络正在逐渐对现行的行业管理模式施加影响。于是传统的线下管理模式急需改变&#xff0c;在此用户需求的引领下&#xff0c;我们系统借助快速演进的网络平台&#xff0…

作者头像 李华
网站建设 2026/7/25 1:31:04

继电器驱动电路模块化设计:从原理到PCB布局实战

在硬件开发过程中,继电器控制电路是每个工程师都会频繁接触的基础模块。无论是智能家居的灯光控制、工业设备的电机驱动,还是自动化系统的信号切换,继电器都扮演着关键角色。然而在实际PCB设计时,很多工程师会陷入"重复造轮子"的困境——每次新项目都要重新绘制继…

作者头像 李华
网站建设 2026/7/25 1:30:28

计算机毕业设计之基于springboot的奖学金评选系统

互联网的普及为人们的日常生活提供了极大的方便。因此&#xff0c;将目前的网上注册登记与网上进行整合&#xff0c;采用springboot框架搭建了网上奖学金评选系统平台&#xff0c;从而达到了奖学金申请的信息化管理。网络平台的运用使得奖学金评选系统体系能被大范围、深入地推…

作者头像 李华