Linux 中怎么排查大页内存配置不当导致的内存浪费

风宇大大_6065

风宇大大_6065

2026-10-10

563人浏览

原创

大页内存配置不当会导致物理内存被预分配却未被有效利用。需通过grep -i huge /proc/meminfo查看hugepages_total、hugepages_free和hugepages_rsvd三值判断浪费程度,并结合/proc/*/smaps确认实际使用进程及页大小,再核查/proc/sys/vm/nr_hugepages、sysctl配置、内核启动参数和容器设置等来源是否合理。

linux 中怎么排查大页内存配置不当导致的内存浪费

大页内存(HugeTLB)配置不当不会立刻报错,但会悄悄吃掉大量物理内存却不被进程真正使用,造成“看不见的浪费”。关键不是看它占了多少,而是看它有没有被有效利用。

先确认大页是否真在占用内存

运行 grep -i huge /proc/meminfo,重点关注三组数字:

  • HugePages_Total:系统当前配置的总大页数(静态预分配)
  • HugePages_Free:尚未被任何进程映射的空闲大页数
  • HugePages_Rsvd:已被进程通过 mmap(MAP_HUGETLB) 预留、但尚未实际分配物理页的数量

如果 HugePages_Total > 0 且 HugePages_Free ≈ HugePages_Total,说明大页全预分配了,但没人用——这就是典型浪费。如果 HugePages_Rsvd > 0 但 HugePages_Free == 0,则可能已卡在分配路径上,需进一步排查死锁(见知识库中强开大页导致死锁部分)。

查清楚是谁申请了大页

大页不体现在普通进程的 RSS 中,得从内核视角找:

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • 执行 grep -r "Huge" /proc/*/smaps 2>/dev/null | grep -E "(MMUPageSize|MMUPage.*Size)",列出所有使用了大页映射的进程 PID
  • 对每个 PID 执行 cat /proc//smaps | awk '/MMUPageSize/{p=$2} /Size:/ && p{print p, $2, $3}',确认其是否真的用了 2MB 或 1GB 大页,以及对应区域大小
  • 结合 ps -p -o pid,comm,args 看该进程命令行,判断是业务主动启用(如 JVM 的 -XX:+UseLargePages),还是被某些中间件、驱动或误配脚本悄悄开启

检查配置来源和合理性

大页数量通常由以下方式设置,需逐项核对:

  • /proc/sys/vm/nr_hugepages:当前生效值,若远高于实际需求(比如物理内存 64G 却设了 1024 个 2MB 大页=2GB),就属于过量预分配
  • /etc/sysctl.conf 或 /etc/sysctl.d/*.conf 中是否有 vm.nr_hugepages=xxx 行;是否被 Ansible、systemd-sysctl 等自动化工具覆盖
  • 启动参数:检查 cat /proc/cmdline 是否含 hugepages=xxx,这种内核启动时硬编码的配置优先级最高,且无法运行时修改
  • 容器环境:Docker/K8s 中是否通过 --memory-hugetlb 或 hugepages:2Mi 暴露了大页,但容器内应用根本没调用 mmap(MAP_HUGETLB)

评估是否真需要大页及替代方案

不是所有场景都适合强制开启大页。判断前先问三个问题:

  • 业务是否明确受益?例如数据库(PostgreSQL/Oracle)、低延迟金融交易系统、DPDK 应用等确实能从减少 TLB miss 中获益;而普通 Web 服务、Java 应用(除非显式启用+调优)往往收益甚微
  • 是否启用了透明大页(THP)?cat /sys/kernel/mm/transparent_hugepage/enabled 若为 [always] 或 [madvise],内核会在后台自动合并小页,无需手动预分配,反而更灵活
  • 能否改用 mmap(MAP_HUGETLB | MAP_ANONYMOUS) 按需分配,而非全局预分配?这样只在真正需要时才锁定物理页,避免静态浪费

确认浪费存在后,可临时清空:echo 0 > /proc/sys/vm/nr_hugepages,再观察业务是否异常。无影响,说明确实不需要;有抖动,则需深入分析具体哪个模块依赖它。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux linux系统

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

900

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2792

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

936

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

829

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

434

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2516

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4672

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

747

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习