PSYoungGen暂停抖动

时间:2014-11-01 21:24:30

标签: java garbage-collection jvm

我在java应用程序中观察到一些奇怪的行为。次要GC暂停时间非常稳定,在2到4毫秒之间,间隔几秒钟(从大约4秒到几分钟不等,具体取决于繁忙程度)。我注意到在第一个完整GC之前,次要的收集暂停时间可能会达到几百毫秒,有时会超过秒标记。然而,在第一次完全收集之后,这些尖峰消失了,并且次要的收集暂停时间不会再次出现并且在2-4毫秒之间保持稳定。这些峰值似乎与终身堆使用率无关。

我不确定如何诊断问题。显然,从完整的集合中发生了一些变化,否则尖峰将继续发生。我正在寻找有关如何解决它的一些想法。

一些细节:

  • 我正在使用-server标志。使用吞吐量并行收集器。
  • 堆大小为1.5G,默认比率用于年轻和终身之间。幸存者口粮仍然是默认的。我不确定这些调查与这项调查有多相关,因为尽管进行了更多调整,但仍然显示出同样的行为。
  • 启动时,我会进行几次数据库调用。大部分信息都可以通过GC消失(并在完整收集后进行)。我的应用程序的某些实例将是GC,而其他实例则不会。

我尝试/想过的事情:

  • Full Perm Gen?我认为并行收集器处理这个很好,并不需要更多的标志,不像CMS。
  • 启动后手动触发完整的GC。我将尝试这一点,希望根据观察结果使问题消失。但是,这只是一个临时解决方案,因为我仍然不明白为什么会出现问题。

1 个答案:

答案 0 :(得分:0)

首先,想了解更多关于此的信息,但由于评论需要50个回购,我没有这样问这里。 这个信息太少了。

要诊断问题,您可以打开GC日志并发布您注意到的行为。此外,您可以使用jstat在应用程序运行时查看堆空间使用情况:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html

要打开GC日志,您可以在此处阅读:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html