我们注意到垃圾收集期间 JVM 的大量暂停,其中用户和系统时间远小于总时间。[Times: user=3.99 sys=0.55, real=34.29 secs] 我们怀疑这可能是由于内存管理和检查透明和大页面配置显示两者都被禁用:
/sys/kernel/mm/redhat_transparent_hugepage/enabled:always [never]
/sys/kernel/mm/redhat_transparent_hugepage/defrag:[always] never
/sys/kernel/mm/redhat_transparent_hugepage/khugepaged/defrag:[yes] no
但是查看 THP 和相关计数器,我们看到很多压缩停滞: egrep 'trans|thp|compact_' /proc/vmstat
nr_anon_transparent_hugepages 0
compact_blocks_moved 113682
compact_pages_moved 3535156
compact_pagemigrate_failed 0
compact_stall 1944
compact_fail 186
compact_success 1758
thp_fault_alloc 6
thp_fault_fallback 0
thp_collapse_alloc 15
thp_collapse_alloc_failed 0
thp_split 17
所以问题是,如果 THP 被禁用,为什么 THP 和压缩停止/失败计数器不为 0,以及如何禁用压缩以便它不会干扰我们的 JVM(我们认为这是长时间 GC 暂停的原因)这发生在 RHEL6 .2、2.6.32-279.5.2.el6.x86_64、JVM 6u21 32 位。谢谢!