2016-03-28 52 views
2

我們正在試圖剖析在生產環境中運行的遠程tomcat應用程序。問題是網絡池中的所有線程都被阻塞,這似乎阻止我們與jconsole,jmc甚至YourKit連接。當jvm運行正常時,所有這些工具都可以正常工作。通過JConsole等連接到凍結的jvm

從JConsole中的錯誤是超時:

Could not connect to server1:9090 : Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
java.net.SocketTimeoutException: Read timed out] 
Could not connect to server1:9090. Make sure the JVM is running and that you are using the correct protocol in the Service URL (service:jmx:rmi:///jndi/rmi://server1:9090/jmxrmi). 

這使得它很難搞清楚什麼是錯與我們的應用。服務器不使用太多的CPU,並有可用內存。所以沒有明顯的資源缺乏。 JVM的似乎只是死

Java版本:jdk1.7.0_75 Tomcat的版本:7.0.65

如何連接到JVM時,它是這樣的任何想法?

+1

也許你可以試試'jstack -F '強制線程轉儲。 –

+0

日誌中的任何內容?如何處理JVM進程的工作目錄?如果你啓用了'-XX:+ HeapDumpOnOutOfMemoryError'?有可能JVM就是這麼braindead它不能拿起電話... –

+0

開始jstack -F stack-trace.log – Sanj

回答

0

你有兩個選擇:

  1. 發送SIGQUIT(Linux)或控制 - 中斷(Windows)和獲得堆棧跟蹤 。
  2. 獲取核心轉儲(Linux上的gcore),然後你可以使用JVM 工具像jstack和朋友使用核心文件
+0

在Windows中終止java進程除了返回提示外不會執行任何操作 – Tommy

+0

SIGQUIT與SIGKILL/SIGTERM不同,它不會終止Java進程。 – sunnychan77