2015-11-26 73 views
0

我面臨一個奇怪的情況。如果你能分享你的意見,我會很高興。Java進程掛起,不能線程轉儲

我們有在Java 1.6.085上運行的解決方案,有時Java進程在生產中變得越來越多。該解決方案在Linux服務器上運行。
我調查了GC日誌,沒有完整的GC。暫停時間也看起來合理。 然後我們嘗試在發生情況時採用線程轉儲,但是kill -3,./jstack或./jstack -F不起作用。沒有線程轉儲可以採取。這可能是什麼原因?任何關於調查問題的想法?

BR -emre

+1

jstack/kill需要停止世界暫停。在某些情況下,這是不可能的http://stackoverflow.com/questions/33917951/how-to-force-reproduce-fullgc-in-jvm您可以請提供系統輸出以下設置-XX:+ PrintGCApplicationStoppedTime -XX:+ PrintSafepointStatistics -XX:PrintSafepointStatisticsCount = 1? – Ivan

+0

@Ivan,我認爲-F不需要STW暫停,它捕獲正在運行的線程堆棧。 – the8472

+1

1.6是古老的,爲什麼不先更新,看看問題是否消失? – the8472

回答

0

我們使用JConsole與topthreads plugin來分析這樣的情況。該插件使用JMX檢查線程運行時間並顯示自跟蹤過程開始以來的CPU使用情況以及每個線程的當前堆棧跟蹤。

要從本地機器連接我們的服務器,我們在膩子中使用隧道,即我們首先通過膩子連接到服務器,然後將jConsole連接到隧道到服務器的本地端口。

+0

Thx for repIy,我下載了新版本並嘗試使用它,但是沒有看到新標籤。你有什麼主意嗎 ? ./jconsole -pluginpath /home/mmsuper/topthreads.jar – emrenak

+0

@emrenak hmm,在Windows客戶端上使用jconsole,我們的jconsole.bat(它向類路徑添加了一些JBoss特定的庫)包含這一行:''%JAVA_HOME% \ bin \ jconsole.exe「-J」-Djava.class.path =%CLASSPATH%「-pluginpath C:\ whatever \ topthreads-1.1.jar' - 所以除非路徑錯誤,否則應該起作用。你有沒有檢查權限,名稱等? – Thomas

1

經過一段時間後,我們瞭解到,由於pstack和qdb命令會出現問題,這些命令會在java進程上執行以用於操作目的。不知何故,pstack和qdb暫停java進程。因此,我們無法採取線程或堆轉儲