THP与内存膨胀说明
正常情况下,Linux 内存页大小是 4KB。开启 THP 后,内核会尝试把多个 4KB 页合并成 2MB 的大页,这样可以减少 TLB miss,提高性能。在小对象场景下开启THP可能会出现内存膨胀(内部碎片),并增加 OOM 风险。
THP内存膨胀的原因
- 内部碎片。
- 一个 2MB 的大页如果只用了很小一部分,其余空间仍然被进程占用,不能给其他进程使用。
- 比如:
- 普通小页:申请 8KB → 用两个 4KB 页 → 基本无浪费。
- THP:申请 8KB → 内核分配一个 2MB 大页 → 实际只用 8KB,剩下 ~2MB 全算“已用”。
- 分配粒度变大。
- THP以2MB为单位分配,容易让内存占用迅速膨胀。
- 内存回收不及时。
- THP的回收和迁移比 4KB 页更复杂,有时候会导致不能及时回收,从而表现为内存一直上涨。

膨胀的部分不会被统计进top的进程输出里面。