更新时间:2026-03-30 GMT+08:00
分享

THP与内存膨胀说明

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

THP内存膨胀的原因

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

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

相关文档