JVM Freeze正在发生,热点日志显示" ParallelGCFailedAllocation","撤销偏见"花了更多的时间

时间:2016-09-14 09:55:57

标签: java performance jvm jvm-hotspot

JVM hotspot logs processed and converted to CSV to plot graph which will show the time taken by different VM operations

我们在群集应用程序中遇到了一个特殊问题。在运行系统一段时间后,应用程序突然冻结,无法找到导致此问题的任何线索。

启用JVM热点日志后,我们会看到" ParallelGCFailedAllocation","撤销偏移"花了更多的时间。

请参阅附图,该图是通过解析热点日志并转换为csv绘制的。 该图表在某个时间显示" ParallelGCFailedAllocation","撤销偏差"是扣球,大约需要13秒,这是不正常的。 我们正试图找到导致它花费这么多时间的原因。

有谁知道如何调试此类问题?

环境详情:

32 core machine running in VMWare hypervisor.
Heap Size: 12GB
RHEL 7 with Open JDK 8

1 个答案:

答案 0 :(得分:0)

哇,你的应用程序中有大约2800个线程,它太多了! 你的堆太庞大了,年轻的4GB,老的8GB。在这种情况下你期待什么?

从PrintSafepointStatistics输出,你没有安全点同步问题,实际上vm操作需要时间。

你可以禁用偏向锁定-XX:-UseBiasedLocking并使用并发gc' s(CMS \ G1)而不是并行旧gc,这可能会帮助你减少暂停,但主要问题是坏的配置,也许还有代码/设计。

  • 使用大小有限的线程池,~2800个线程太多
  • 12 GB是巨大的堆,年轻的gen也不应该那么大。
  • 描述你的应用程序(JFR,yourkit,jprofiler,visualvm)可以帮助你找到分配热点。
  • 也是eclipse MAT可以帮助你分析堆
  • 如果要跟踪revokeBias,请添加-XX:+TraceBiasedLocking