什么是大页使用量核对
大页(HugePages)把内存按 2MiB 或 1GiB 的粒度映射,减少页表项数量与 TLB 缺失,常用于数据库与虚拟化场景。核对使用量要看 /proc/meminfo 的四个字段:HugePages_Total 是预留总数、Free 是当前空闲、Rsvd 是已被预留但尚未使用的计数、Surp 是超额预留计数。判断实际占用不能拿 Total 直接乘页大小,要减掉空闲部分。
基本信息
| 字段 | /proc/meminfo 的 HugePages_Total / Free / Rsvd / Surp |
|---|---|
| 页大小 | Hugepagesize 字段,常见 2048kB |
| 占用估算 | (Total - Free + Rsvd) × Hugepagesize |
| 调整入口 | /sys/kernel/mm/hugepages/hugepages-<size>kB/nr_hugepages |
| 透明大页 | /sys/kernel/mm/transparent_hugepage/enabled |
| 权限 | 调整预留需要 root,通常需要停机窗口 |
典型使用场景
- 数据库内存核对:确认大页预留是否被业务真正用上
- 内存告警排查:区分大页预留与普通匿名内存的占用
- 性能评估:判断是否因大页不足回落到普通页
- 容量规划:按业务峰值确定预留数量,避免长期空闲浪费
- 与透明大页策略一起核对,理清两种机制的区别
核对方法
核对方法
grep -i huge /proc/meminfo # 四个字段与页大小
awk '/Hugepagesize/{print $2, $3}' /proc/meminfo
ls /sys/kernel/mm/hugepages/ # 支持的页大小目录
cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages # 预留数量
cat /sys/kernel/mm/transparent_hugepage/enabled # THP 策略
cat /proc/<pid>/smaps | grep -i huge # 进程实际使用的大页映射字段读法
| 字段 | 含义 | 异常信号 |
|---|---|---|
| HugePages_Total | 预留总数 | 长期闲置说明预留过量 |
| HugePages_Free | 尚未使用的空闲页 | 为 0 且业务报分配失败说明预留不足 |
| HugePages_Rsvd | 已承诺但未映射 | 理解占用时不能只减 Free |
| HugePages_Surp | 超额预留计数 | 非 0 表示存在超配 |
| Hugepagesize | 单页大小 | 决定换算系数的唯一依据 |
明确区分大页与透明大页:前者是显式预留、由应用按需映射;后者由内核自动管理,两者的核对入口与调优手段不同。
调整大页数量通常需要停机或重启业务:预留内存一旦分配就无法被普通进程使用,变更前必须与业务确认峰值需求与窗口。
核对时注意单位口径:meminfo 以 kB 展示,而应用配置与内核参数常按 MiB/GiB 书写,换算错误会让预留数量差出数量级,务必先在纸面上对齐单位再动手。