Dump Thread dapat membantu kita menentukan puncak CPU, kebuntuan, pengecualian memori, respons aplikasi yang lambat, waktu respons yang lama dan masalah sistem lainnya. Beberapa alat analisis online seperti http://fastthread.io/ juga dapat membantu kami menganalisis dan menemukan masalah, tetapi alat ini memerlukan file dump. Oleh karena itu, dalam artikel ini, saya merangkum cara untuk mengambil file dump java di 7.
1. JStack
JStack adalah alat baris perintah yang efektif untuk merangkak file dump utas. Terletak di folder bin (jdk_home/bin) di direktori JDK. Berikut ini adalah perintah untuk merangkak file dump:
jStack -l <pid>> <file-path>
menjelaskan:
PID: ID proses aplikasi Java, yaitu ID proses aplikasi yang perlu merangkak file dump.
File-path: Path untuk menyimpan file dump.
Contoh:
JStack -L 37320> /opt/tmp/threaddump.txt
Contoh di atas menunjukkan menggunakan JStack untuk menghasilkan file dump ke dalam direktori /opt/tmp/threaddump.txt.
Mulai dari Java5, JStack telah dimasukkan dalam JDK. Jika Anda menggunakan versi lama JDK, Anda harus mempertimbangkan menggunakan metode lain.
2. Bunuh -3
Dalam hal pertimbangan keamanan, beberapa mesin di lingkungan produksi hanya berisi lingkungan JRE, sehingga alat JStack tidak dapat digunakan. Dalam hal ini, kita dapat menggunakan kill -3:
kill -3 <pid>
menjelaskan:
PID: ID proses aplikasi Java, yaitu ID proses aplikasi yang perlu merangkak file dump.
Contoh:
kill -3 37320
Saat menggunakan kill -3 untuk menghasilkan file dump, file dump adalah output ke aliran kesalahan standar. Jika aplikasi Anda berjalan di Tomcat, konten dump akan dikirim ke file <omcat_home> /logs/catalina.out.
3. JVisualVM
Java VisualVM adalah alat antarmuka grafis yang dapat memberikan informasi JVM. Terletak di file JDK_HOME/BIN/JVISUALVM.EXE. Dimulai dengan JDK6 Update7, itu termasuk dalam JDK.
Jalankan JVISUALVM, dan di panel kiri (seperti yang ditunjukkan pada gambar di bawah), informasi JVM yang sedang berjalan terdaftar. Alat ini dapat mengambil file dump dari JVM yang menjalankan lokal atau jarak jauh.
Klik tombol Dump Thread yang sesuai dengan nama proses pada gambar di atas untuk menghasilkan file dump, seperti yang ditunjukkan pada gambar di bawah ini:
4. JMC
Java Mission Control (JMC) adalah alat yang dapat mengumpulkan dan menganalisis data dari lingkungan lokal atau produksi. Dimulai dengan Oracle JDK 7 Update 40, itu termasuk dalam JDK, yang dapat menghasilkan file dump dari JVM. JMC terletak di file JDK_HOME/bin/JMC.exe:
Setelah menjalankan alat, Anda dapat melihat proses Java berjalan secara lokal, yang juga dapat dihubungkan ke mesin jarak jauh. Klik dua kali proses Java yang ingin Anda buat file dump, klik perekam penerbangan, dan Anda akan melihat kotak dialog berikut:
Di kotak drop-down dump utas, Anda dapat memilih interval waktu untuk menghasilkan file dump. Dalam contoh di atas, file dump akan dihasilkan setiap 60 detik. Setelah memilih lengkap, mulailah perekam penerbangan dan Anda dapat melihat konten file dump di panel utas:
5. Windows (Ctrl + Break)
Metode ini hanya valid pada sistem operasi Windows:
Pilih baris perintah di jendela konsol
Tekan perintah "Ctrl + Break" pada jendela baris perintah
Kemudian file dump akan dihasilkan, dan isi file dump akan dicetak pada jendela baris perintah.
Catatan 1: Ada beberapa buku catatan (seperti seri Lenovo) yang telah membatalkan kunci "break", dalam hal ini Anda harus ke Google untuk kunci yang memiliki fungsi yang sama dengan tombol break, dan saya menemukan bahwa kunci "fungsi fungsi + b" sama dengan kunci break, jadi saya menggunakan kunci "ctrl + fn + b" untuk menghasilkan file dump.
Catatan 2: Satu kerugian dari penggunaan metode di atas adalah bahwa konten file dump akan dicetak ke konsol. Jika tidak ada file dump, sulit bagi kita untuk menggunakan alat analisis seperti http://fasthread.io untuk menganalisis file dump. Oleh karena itu, Anda dapat menggunakan perintah berikut untuk mengeluarkan konten file dump ke file teks. Misalnya, nama aplikasi Anda adalah samplethreadprogram, jadi perintah yang biasa adalah sebagai berikut:
java -classpath . SampleThreadProgram
Perintah untuk mengeluarkan konten file dump ke file teks adalah sebagai berikut:
java -classpath . SampleThreadProgram > C:/workspace/threadDump.txt 2>&1
Setelah Anda menekan tombol "Ctrl + Break", file dump akan disimpan ke c: /workspace/threaddump.txt.
6. ThreadmxBean
Dimulai dengan JDK 1.5, ThreadmxBean telah diperkenalkan. Ini adalah antarmuka manajemen JVM. Menggunakan antarmuka ini, Anda hanya perlu sejumlah kecil kode untuk menghasilkan file dump. Berikut ini adalah implementasi utama menggunakan threadmxBean untuk menghasilkan file dump:
public void dumpThreadDump () {threadmxBean threadMxBean = ManagementFactory.getThreadMxBean (); untuk (threadInfo ti: threadmxbean.dumpallthreads (true, true)) {System.out.print (ti.tostring ()); }}7. Dinamika Aplikasi Alat APM
Beberapa alat pemantauan kinerja aplikasi menyediakan fungsi menghasilkan file dump. Jika Anda menggunakan dinamika aplikasi untuk memantau aplikasi Anda, berikut ini adalah langkah -langkah untuk menghasilkan file dump:
Buka jendela Create Action dan pilih Diagnostik-> Ambil dump utas di jendela Create Action;
Masukkan nama tindakan, jumlah file dump untuk merangkak, dan interval waktu (milidetik) untuk merangkak file dump;
Jika Anda ingin melakukan beberapa tindakan sebelum tindakan dump merangkak dimulai, Anda dapat memilih yang memerlukan persetujuan pelaksanaan sebelum kotak centang tindakan ini dan memasukkan alamat email individu atau grup;
Klik OK.
Meringkaskan
Meskipun saya mendaftarkan 7 cara untuk mengambil file dump sebelumnya, IMHO, JStack dan Kill -3 adalah pilihan terbaik karena alasan berikut:
A. Sederhana, mudah diimplementasikan;
B. Umum: Dalam kebanyakan kasus, terlepas dari jenis sistem operasi, vendor Java, versi JVM, dll.