Saya menggunakan kill -3
perintah untuk melihat dump thread JVM di unix. Tetapi di mana saya dapat menemukan output dari kill
perintah ini ? Saya tersesat!!
java
multithreading
dump
javanerd.dll
sumber
sumber
Jawaban:
Sebagai alternatif, Anda dapat menggunakan jstack (Disertakan dengan JDK) untuk mengambil thread dump dan menulis hasilnya di mana pun Anda inginkan. Apakah itu tidak tersedia di lingkungan unix?
sumber
Thread dump ditulis ke sistem dari VM tempat Anda mengeksekusi
kill -3
. Jika Anda mengarahkan output konsol JVM ke file, thread dump akan ada di file itu. Jika JVM berjalan di konsol terbuka, maka thread dump akan ditampilkan di konsolnya.sumber
Ada cara untuk mengalihkan output dump thread JVM pada sinyal putus ke file terpisah dengan opsi diagnostik LogVMOutput :
sumber
Dengan Java 8 dalam gambar,
jcmd
adalah pendekatan yang lebih disukai.Berikut adalah cuplikan dari dokumentasi Oracle :
Rilis JDK 8 memperkenalkan Java Mission Control, Java Flight Recorder, dan utilitas jcmd untuk mendiagnosis masalah dengan aplikasi JVM dan Java. Disarankan untuk menggunakan utilitas terbaru, jcmd, bukan utilitas jstack sebelumnya untuk meningkatkan diagnostik dan mengurangi overhead kinerja.
Namun, mengirimkan ini dengan aplikasi mungkin merupakan implikasi lisensi yang saya tidak yakin.
sumber
jcmd
gagal terhubung ke proses layanan windows dengancom.sun.tools.attach.AttachNotSupportedException: Insufficient memory or insufficient privileges to attach
sementarajstack -F
berhasil: stackoverflow.com/questions/1197912/…Di lokasi yang sama di mana stdout JVM ditempatkan. Jika Anda memiliki server Tomcat, ini adalah
catalina_(date).out
filenya.sumber
Saat menggunakan kill -3, seseorang akan melihat thread dump dalam output standar. Sebagian besar server aplikasi menulis keluaran standar ke file terpisah. Anda harus menemukannya di sana saat menggunakan kill -3. Ada beberapa cara untuk mendapatkan thread dump:
kill -3 <PID>
: Memberikan keluaran ke keluaran standar.Untuk VM hotspot kita juga dapat menggunakan
jstack
perintah untuk menghasilkan thread dump. Ini adalah bagian dari JDK. Sintaksnya adalah sebagai berikut:sumber
kill -3 <PID>
seharusnya tidak membunuh JVM. Jenis aplikasi Java apa yang Anda lihat?Di Jboss Anda dapat melakukan hal berikut
Ini akan mengarahkan output / threadump Anda ke konsol file yang ditentukan dalam perintah di atas.
sumber
sumber
Langkah-langkah yang harus Anda ikuti jika Anda ingin thread dump dari Proses Java StandAlone Anda
Langkah 1: Dapatkan ID Proses untuk skrip shell yang memanggil program java
Langkah 2: Dapatkan ID Proses untuk Anak yang Diminta oleh runABCD. Gunakan PID di atas untuk mendapatkan anak-anaknya.
Langkah 3: Dapatkan JSTACK untuk proses tertentu. Dapatkan ID Proses dari proses XYSServer Anda. yaitu 8536
sumber