首页 文章

GcTimeLimit可能没有错误的原因?

提问于
浏览
3

我有一个Java中的Web服务,包含在Jetty中 . 我正在使用Sun的Java 6和默认的ParallelGC,并且我打开了以下命令行选项:“ - verbose:gc -XX:PrintGCTimeStamps --XX:PrintGCDetails” .

当我的进程内存不足时,我会看到这样的记录,背靠背:

66872.846: [Full GC [PSYoungGen: 932534K->930686K(1865088K)] [PSOldGen: 5595037K->5595024K(5595136K)] 6527571K->6525710K(7460224K) [PSPermGen: 16488K->16487K(21504K)], 12.2488150 secs] [Times: user=12.25 sys=0.00, real=12.24 secs] 
66885.098: [Full GC [PSYoungGen: 932608K->932608K(1865088K)] [PSOldGen: 5595024K->5595024K(5595136K)] 6527632K->6527632K(7460224K) [PSPermGen: 16487K->16487K(21504K)], 9.6745600 secs] [Times: user=9.66 sys=0.01, real=9.67 secs] 
66894.773: [Full GC [PSYoungGen: 932608K->932488K(1865088K)] [PSOldGen: 5595024K->5595023K(5595136K)] 6527632K->6527512K(7460224K) [PSPermGen: 16487K->16487K(21504K)], 11.8445420 secs] [Times: user=11.85 sys=0.00, real=11.85 secs] 
66906.623: [Full GC [PSYoungGen: 932608K->932608K(1865088K)] [PSOldGen: 5595023K->5595023K(5595136K)] 6527631K->6527631K(7460224K) [PSPermGen: 16487K->16487K(21504K)], 9.6006950 secs] [Times: user=9.60 sys=0.00, real=9.60 secs] 
66916.224: [Full GC [PSYoungGen: 932608K->932488K(1865088K)] [PSOldGen: 5595023K->5595023K(5595136K)] 6527631K->6527512K(7460224K) [PSPermGen: 16487K->16487K(21504K)], 9.6498320 secs] [Times: user=9.65 sys=0.00, real=9.65 secs] 
66925.881: [Full GC [PSYoungGen: 932608K->0K(1865088K)] [PSOldGen: 5595023K->4133351K(5595136K)] 6527631K->4133351K(7460224K) [PSPermGen: 16487K->16487K(21504K)], 6.8990990 secs] [Times: user=6.90 sys=0.00, real=6.90 secs]

前五行似乎显示垃圾收集器完全无法取得任何进展 . 根据我对JVM的理解,这应该导致OutOfMemoryError,但我在日志中看不到类似的东西 . 某些东西(在JVM级别)是否可能阻止它们被抛出?或者也许Jetty或我的应用程序正在抑制它们?

谢谢你的建议!

1 回答

  • 1

    尝试显式设置选项,或设置-XX:GCHeapFreeLimit . 这些选项的文档很薄,可能无法准确反映您正在运行的JVM的行为 . (或者相关选项的默认值可能已更改 . )

相关问题