【问题标题】:Transparent huge pages disabled but compact_stall is not null禁用透明大页面,但 compact_stall 不为空
【发布时间】:2013-05-19 03:58:38
【问题描述】:

我们注意到垃圾回收期间 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 位上。谢谢!

【问题讨论】:

  • 这“/sys/kernel/mm/redhat_transparent_hugepage/defrag:[always] never”不是表示它启用了吗? “总是[从不]”不是意味着禁用吗?
  • 我想我在 Centos 上遇到过类似的问题,关闭透明大页面是否有效?

标签: memory-management garbage-collection rhel6


【解决方案1】:

要真正摆脱 THP,您必须确保不仅禁用 THP 守护程序,而且还禁用 THP 碎片整理工具。 defrag 将独立于 THP 运行,而 /sys/kernel/mm/khugepaged/defrag 中的设置仅允许控制 THP 守护程序是否也可以运行 defrag。 这意味着:即使您的应用程序没有获得 THP 的(潜在)好处,导致系统停止的碎片整理过程仍然有效

鼓励使用独立于分发的路径来控制 THP 和碎片整理设置: /sys/kernel/mm/transparent_hugepage/(可能是 /sys/kernel/mm/redhat_transparent_hugepage 的符号链接)

这会导致:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

如果您正在运行 java 应用程序并想知道 THP/defrag 是否导致 jvm 暂停或停止,则可能值得查看您的 gc 日志。启用 -XX:+PrintGcDetails 后,您可能会观察到比系统/用户时间长得多的“真实”时间。

在我的情况下,以下单行就足够了

less gc.log | grep sys=0 | grep user=0 | grep -P "real=[1-9]"

关于 THP 负面影响的最早描述是 Greg Rahn 的这篇博文:http://structureddata.org/2012/06/18/linux-6-transparent-huge-pages-and-hadoop-workloads/

【讨论】:

  • 我发现有趣的是,我读过的大多数关于 THP 的帖子都没有提到这一点(我们自己肯定也看到了),但人们注意到,简单地禁用 THP 就足够了解决他们的问题(包括各种数据存储的文档)。我想知道禁用是否足以大部分修复由于 THP 引起的延迟问题,而这只是完全清除它?
  • 正如我已经说过的:内存碎片整理(导致系统停顿)由 THP 守护程序和碎片整理守护程序启动。禁用 THP 可能会减少停顿次数。在某些情况下,这已经足够了,但谁真的想用“也许”停止呢?
  • 是的。有趣的是,我们还发现,即使我们禁用了 THP(作为引导期间的内核参数)和碎片整理(在运行时),尽管问题远没有我们做这些事情之前那么糟糕。我们正在继续调查。
  • compact_stall 计数器也报告 kswapd 活动。
猜你喜欢
  • 2017-12-29
  • 1970-01-01
  • 2012-10-09
  • 2023-03-04
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
相关资源
最近更新 更多