2014-11-01 70 views
0

我在我的Java应用程序中观察到一些奇怪的行为。较小的GC暂停时间非常稳定,在2到4毫秒之间,间隔几秒钟(取决于繁忙度从约4秒到几分钟)。我注意到,在完整的GC之前,第一个,小的收集暂停时间可以达到几百毫秒,有时会突破秒标记。然而,在第一次完整收集之后,这些尖峰消失,小的收集停顿时间不再增加,并且在2-4毫秒之间保持稳定。这些峰值似乎与终身堆使用量相关。PSYoungGen暂停抖动

我不确定如何诊断问题。很明显,全部收藏品都有所改变,否则尖峰将继续发生。我正在寻找一些关于如何解决它的想法。

一些细节:

  • 我使用-server标志。使用吞吐量并行收集器。
  • 堆大小为1.5G,默认比例用于青少年和老年人之间。幸存者口粮仍然处于违约状态。我不确定这些调查与这些调查之间的关联程度如何,因为尽管做了更多调整,但仍显示出相同的行为。
  • 在启动时,我进行了几次数据库调用。大部分信息可以通过GC(远程收集)完成。我的应用程序的一些实例将GC,而其他实例不会。

我已经试过约/想法:

  • 全烫发根?我认为平行收集器处理这个罚款,并不需要更多的标志,不像CMS。
  • 启动后手动触发完整的GC。我会尝试这个,希望根据观察结果让问题消失。然而,这只是一个临时解决方案,因为我仍然不明白为什么还有一个问题。

回答

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