2016-03-28 15 views
2

Üretimde çalışan bir uzak tomcat uygulamasını profillemeye çalışıyoruz. Sorun, web havuzundaki tüm iş parçacıklarının engellenmesi ve bu durumun jconsole, jmc ve hatta YourKit ile bağlantı kurmamızı engelliyor olmasıdır. Tüm bu araçlar, jvm iyi çalıştığında iyi çalışır.JConsole vb. Ile donmuş jvm'ye bağlanma

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). 

Bu zor bizim uygulama ile neyin yanlış olduğunu anlamaya yapar:

jconsole hata

zaman aşımı olduğunu. Sunucu fazla işlemci kullanmıyor ve boş bellek var. Öyleyse görünür kaynak eksikliği yok. jvm sadece ölü

Java sürümünü görünüyor: Tomcat sürümünü jdk1.7.0_75: 7.0.65

böyle olduğunda jvm bağlanmak için nasıl bir fikir?

+1

kullanarak JVM jstack gibi Araçlar ve arkadaşları kullanabilirsiniz. –

+0

Günlüklerde herhangi bir şey var mı? JVM sürecinin çalışma dizini nasıl olur? -XX: + HeapDumpOnOutOfMemoryError' özelliğini etkinleştirirseniz ne olur? JVM'nin o kadar akıllı olduğu da mümkün ... Telefon: –

+0

jstack -F stack-trace.log – Sanj

cevap

0

Sen birkaç seçenek vardır:

  1. Gönder SIGQUIT sinyalini (Linux) veya Control Molası (Windows) ve Not yığınına iz olsun.
  2. bir çekirdek dökümü (Linux üzerinde gcore) alın ve sonra Belki jstack -F `bir iş parçacığı dökümü zorlamak için` deneyebilirsiniz çekirdek dosyası
+0

Pencerelerde bir java işleminin sonlandırılması, – Tommy

+0

SIGQUIT isteminden farklı bir şey yapmıyor SIGKILL/SIGTERM'den farklıdır ve bir Java işlemini durdurmaz. – sunnychan77