更新时间:2025-09-25 GMT+08:00
分享

THP与内存膨胀说明

正常情况下,Linux 内存页大小是 4KB。开启 THP 后,内核会尝试把多个 4KB 页合并成 2MB 的大页,这样可以减少 TLB miss,提高性能。在小对象场景下开启THP可能会出现内存膨胀(内部碎片),并增加 OOM 风险。

THP内存膨胀的原因

  1. 内部碎片。
    • 一个 2MB 的大页如果只用了很小一部分,其余空间仍然被进程占用,不能给其他进程使用。
    • 比如:
      • 普通小页:申请 8KB → 用两个 4KB 页 → 基本无浪费。
      • THP:申请 8KB → 内核分配一个 2MB 大页 → 实际只用 8KB,剩下 ~2MB 全算“已用”。
  2. 分配粒度变大。
    • THP以2MB为单位分配,容易让内存占用迅速膨胀。
  3. 内存回收不及时。
    • THP的回收和迁移比 4KB 页更复杂,有时候会导致不能及时回收,从而表现为内存一直上涨。

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

相关文档