Ben kullanıyorum kill -3
JVM'nin unix'teki iş parçacığı dökümünü görmek için komut . Ama bu kill
komutun çıktısını nerede bulabilirim ? Kayboldum !!
Ben kullanıyorum kill -3
JVM'nin unix'teki iş parçacığı dökümünü görmek için komut . Ama bu kill
komutun çıktısını nerede bulabilirim ? Kayboldum !!
Yanıtlar:
Bir iş parçacığı dökümü almak ve çıktıyı istediğiniz yere yazmak için alternatif olarak jstack'i (JDK ile birlikte verilir) kullanabilirsiniz. Bu bir unix ortamında mevcut değil mi?
jstack PID > outfile
İş parçacığı dökümü, üzerinde çalıştırdığınız VM'den sisteme yazılır kill -3
. JVM'nin konsol çıktısını bir dosyaya yeniden yönlendiriyorsanız, iş parçacığı dökümü o dosyada olacaktır. JVM açık bir konsolda çalışıyorsa, iş parçacığı dökümü konsolunda görüntülenecektir.
Kesme sinyali üzerindeki JVM iş parçacığı dökümü çıktısını LogVMOutput tanılama seçeneği ile ayrı bir dosyaya yönlendirmenin bir yolu vardır :
-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log
Resimde Java 8 ile jcmd
tercih edilen yaklaşım budur.
jcmd <PID> Thread.print
Oracle belgelerinden kod parçacığı aşağıdadır :
JDK 8 sürümü, JVM ve Java uygulamalarıyla ilgili sorunları tanılamak için Java Mission Control, Java Flight Recorder ve jcmd yardımcı programını tanıttı. Gelişmiş tanılama ve düşük performans ek yükü için önceki jstack yardımcı programı yerine en yeni yardımcı program olan jcmd'nin kullanılması önerilir.
Ancak, bunu uygulamayla birlikte göndermek, emin olmadığım lisanslama sonuçları olabilir.
jcmd
Windows hizmet sürecine bağlanamıyor : stackoverflow.com/questions/1197912/…com.sun.tools.attach.AttachNotSupportedException: Insufficient memory or insufficient privileges to attach
jstack -F
Kill -3'ü kullanırken standart çıktıda iş parçacığı dökümü görmelisiniz. Uygulama sunucularının çoğu standart çıktıyı ayrı bir dosyaya yazar. Kill -3'ü kullanırken orada bulmalısınız. İş parçacığı dökümlerini almanın birden çok yolu vardır:
kill -3 <PID>
: Standart çıktıya çıktı verir.Hotspot sanal makineleri jstack
için, bir iş parçacığı dökümü oluşturmak için komutu da kullanabiliriz . JDK'nın bir parçası. Sözdizimi aşağıdaki gibidir:
Usage:
jstack [-l] <pid> (to connect to running process)
jstack -F [-m] [-l] <pid>(to connect to a hung process)
- For JRockit JVM we can use JRCMD command which comes with JDK Syntax:
jrcmd <jrockit pid> [<command> [<arguments>]] [-l] [-f file] [-p] -h]
kill -3 <PID>
öldürmemeli. Ne tür bir Java uygulamasına bakıyorsunuz?
StandAlone Java İşleminizin iş parçacığı dökümünü istiyorsanız izlemeniz gereken adımlar
Adım 1: Java programını çağıran kabuk betiği için İşlem Kimliğini alın
linux$ ps -aef | grep "runABCD"
user1 **8535** 4369 0 Mar 25 ? 0:00 /bin/csh /home/user1/runABCD.sh
user1 17796 17372 0 08:15:41 pts/49 0:00 grep runABCD
Adım 2: runABCD tarafından Çağrılan Çocuk için İşlem Kimliğini alın. Çocukları almak için yukarıdaki PID'yi kullanın.
linux$ ps -aef | grep **8535**
user1 **8536** 8535 0 Mar 25 ? 126:38 /apps/java/jdk/sun4/SunOS5/1.6.0_16/bin/java -cp /home/user1/XYZServer
user1 8535 4369 0 Mar 25 ? 0:00 /bin/csh /home/user1/runABCD.sh
user1 17977 17372 0 08:15:49 pts/49 0:00 grep 8535
3. Adım: Belirli işlem için JSTACK'i edinin. XYSServer işleminizin İşlem kimliğini alın. yani 8536
linux$ jstack **8536** > threadDump.log