2015-12-13 25 views
5

運行與JVM:JVM凍結長壽高負荷下的測試

java version "1.7.0_79" 
Java(TM) SE Runtime Environment (build 1.7.0_79-b15) 
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode) 

OS:

CentOS release 6.4 (Final) 

JVM選項:

-Xmx4g -Xms4g -XX:MaxPermSize=4g -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintClassHistogram -XX:+CMSClassUnloadingEnabled -verbose:gc -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+DisableExplicitGC 

在OSGi環境中運行,塞式DB, NETTY(NIO)聯網。

冉週末長壽測試。 這是最後打印:

[2015-12-11 09:54:51,185] INFO : [GC pause (young) 

2天之後,我跑strace的對PID,然後將這些都是接下來的打印:

[2015-12-11 09:54:51,185] INFO : [GC pause (young) 3598M->1458M(4096M), 0.0280020 secs] 
[2015-12-13 11:54:54,353] INFO : [GC pause (young) 3598M->1464M(4096M), 180001.5628870 secs] 

第一打印完成,接下來的打印表現出了2天GC。

在凍結期間,jvm沒有響應線程轉儲信號(pkill -QUIT pid)。 這種凍結每隔幾天發生一次。 凍結不僅發生在G1收集器上,而且還發生在CMS收集器上。 如何開始調試,以及可能導致此問題的原因?

謝謝。

編輯: 再次凍結,此時strace不釋放凍結。 第二次凍結使用jstack發佈。

更新: 發現問題了!看看下面的答案。

+0

什麼操作系統?你嘗試過'jstack -m -F'嗎?你有沒有試過java 8? – the8472

+0

您是否嘗試過'perf'? – Ivan

+0

我添加了OS類型。沒有嘗試過Java 8,jstack或perf。 –

回答