2011-12-13 22 views
0

嗨我正在與6應用程序服務器平衡的Java應用程序,我得到了凍結全部gc(導致應用程序中的超時)隨機在他們中的1個,大約1-2個應用程序服務器的一天。jboss Java隨機完整的GC冷凍應用程序

GC.log

...

2011-12-13T10:38:36.576+0100: 79825.032: [GC [PSYoungGen: 874833K->66144K(1071936K)] 3516152K->2809316K(3868160K), 0.2535770 secs] [Times: user=0.94 sys=0.00, real=0.25 secs] 
2011-12-13T10:38:36.830+0100: 79825.286: [Full GC [PSYoungGen: 66144K->0K(1071936K)] [ParOldGen: 2743171K->2753089K(2796224K)] 2809316K->2753089K(3868160K) [PSPermGen: 283256K->269894K(524288K)], 7.3616280 secs] [Times: user=25.14 sys=0.00, real=7.36 secs] 
2011-12-13T10:38:46.152+0100: 79834.608: [Full GC [PSYoungGen: 752192K->0K(1071936K)] [ParOldGen: 2753089K->2751441K(2796224K)] 3505281K->2751441K(3868160K) [PSPermGen: 270340K->269781K(524288K)], 6.6231180 secs] [Times: user=22.52 sys=0.01, real=6.62 secs] 
2011-12-13T10:38:54.591+0100: 79843.047: [Full GC [PSYoungGen: 752192K->0K(1071936K)] [ParOldGen: 2751441K->2719651K(2796224K)] 3503633K->2719651K(3868160K) [PSPermGen: 270670K->269784K(524288K)], 5.5780510 secs] [Times: user=19.75 sys=0.01, real=5.58 secs] 

...

我的解決方法實際上它殺死JBoss和重新啓動它(不是很好的解決方案)。

這是我的系統的conf:

Mem: 6 Gb 
Intel(R) Xeon(R) CPU   L5640 @ 2.27GHz (4 core) 
java version "1.6.0_26" 
Scientific Linux release 6.0 (Carbon) 
jboss-4.0.5.GA 

Jboss的參數:

-Xms4G 
-Xmx4G 
-Dsun.rmi.dgc.client.gcInterval=3600000 
-Dsun.rmi.dgc.server.gcInterval=3600000 
-verbose:gc 
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:PermSize=512m 
-XX:MaxPermSize=512m 
-XX:+CMSClassUnloadingEnabled 
-XX:+UseCompressedOops 
-XX:+DisableExplicitGC 
-XX:+UseParallelOldGC 
-XX:ParallelGCThreads=4 
-XX:+UseAdaptiveSizePolicy 
-XX:+AggressiveOpts 
-Xdebug 

任何人都可以幫我請? 謝謝

+0

你可以嘗試使用Java 7嗎?它應該更加順暢地使用GC – stivlo

+0

我不會推薦使用Java 7來運行這個,Jboss版本太舊了...大多數情況下,Java 7不被支持,我甚至想知道Java 6是否支持jboss 4.0。 5 –

+0

我不能,因爲這是一個生產。 – astral00

回答

0

您是否嘗試過使用自適應尺寸調整策略:-XX:+ UseAdaptiveSizePolicy和-XX:MaxGCPauseMilis = 100和-XX:GCTimeRatio = 19?

如果這沒有幫助,那麼Concurrent Mark Sweep Collector(-XX:UseConcMarkSweepGC)?

如果你有時間看看題爲「一切我所學過關於JVM性能調整@Twitter」(slidesvideo),它解釋了權衡,當談到選擇一個GC演示。

+0

我會試試這個,tnx。 – astral00

+0

如果你這樣做,你必須改變-Xms,使它不等於-Xmx。這會禁用vm的人機工程學。 – Erik

0

我想你應該在這裏進行分析你的應用程序,恐怕沒有別的選擇了...... 沒有集羣的完全GC凍結? 您可以嘗試使用不同的GarbageCollector運行,但可能導致此類行爲的原因是應用程序中某處存在內存泄漏,或者至少在內存消耗方面存在「可疑錯誤」對象處理。

您可以做的另一件事是在一天中生成堆轉儲,看看是否有任何差異可以指出問題。

順便說一句,我想它的64位Java和JBoss,對不對? :)對於32位應用程序有點問題,以處理4 GB的內存在同一進程中...

+0

是的,它是64位。 – astral00

+0

完整的gc總是在某個時候停止應用程序,問題是應用程序停止了多長時間。 – Erik