Definisi JStack:
JStack adalah alat jejak tumpukan yang dilengkapi dengan mesin virtual Java.
Pendahuluan Dasar:
JStack digunakan untuk menghasilkan snapshot utas dari waktu saat ini dari mesin virtual Java. Snapshots Thread adalah kumpulan tumpukan metode yang dijalankan setiap utas di mesin virtual Java saat ini. Tujuan utama menghasilkan snapshot utas adalah untuk menemukan alasan jeda utas jangka panjang, seperti kebuntuan antara benang, loop mati, dan penantian jangka panjang yang disebabkan oleh meminta sumber daya eksternal.
Saat utas berhenti, Anda dapat memeriksa tumpukan panggilan setiap utas melalui JStack, dan Anda dapat tahu apa yang dilakukan utas yang tidak responsif di latar belakang atau sumber daya apa yang ditunggu -tunggu.
Format Perintah:
jstack [opsi] pid
Parameter Dasar:
-F Informasi Stack Pencetakan Paksa Saat 'JStack [-L] PID' tidak memiliki yang sesuai
-L Daftar Panjang. Cetak informasi tambahan tentang kunci, seperti daftar sinkronisasi yang dapat dimiliki milik java.util.concurrent.
-M Cetak Semua Informasi Tumpukan Java dan Kerangka Kerja C/C ++ Asli. -h | -Help Informasi Bantuan Cetak
PID Java Process ID yang perlu dicetak informasi konfigurasi, Anda dapat menggunakan alat JPS untuk menanyakan
Kasus
C:/Pengguna/Administrator> JStack 5516full Thread Dump Java Hotspot (TM) 64-Bit Server VM (24.79-B02 Mode Campuran): "Destroyjavm" Prio = 6 TID = 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 "Thread -1" prio = 6 tid = 0x00000000000cb13800 nid = 0x19ac Menunggu entri monitor [0x00000000d67f000] java.lang.thread.state: diblokir (pada monitor objek) di thread.deadlockdemo $ 2.run (dadlockdemo.java.java: waiting- waitllockdemo $ 2.run (dadlockdemo.java.java: locklockdemo $ 2.run (dadlockdemo.java.java: 3) TO. (a java.lang.String) - locked <0x00000007d5a9beb8> (a java.lang.String) at java.lang.Thread.run(Unknown Source) "Thread-0" prio=6 tid=0x000000000cb0e800 nid=0x6bc waiting for monitor entry [0x000000000d48f000] java.lang.thread.state: diblokir (pada monitor objek) di thread.deadlockdemo $ 1.run (deadlockdemo.java:21) - menunggu untuk mengunci <0x00000007d5a9beb8> (a java.lang.string) - terkunci <0x00000007d57d5be9) (A Java.Lang) - terkunci <0x00000007d57d5e9) (A Java.Lang) - terkunci <0x00000007d57d5be8. java.lang.thread.run (sumber yang tidak diketahui)
Kode kebuntuan dijalankan di sini, menyebabkan kedua utas dalam program ini menunggu pihak lain melepaskan kunci, menyebabkan program tersebut ditutup.
Dari kode ini, dapat dilihat dengan jelas bahwa baris 35 dan baris 21 di deadlockdemo.class diblokir, dan kemudian kita perlu mengoptimalkan fungsi ini.
PS: Dalam operasi aktual, informasi dump seringkali tidak cukup untuk mengkonfirmasi masalah. Disarankan untuk menghasilkan tiga informasi pembuangan. Jika setiap dump menunjuk ke masalah yang sama, kami akan menentukan tipikal masalah.
Meringkaskan
Di atas adalah semua tentang analisis instance JStack dan Thread Dump dalam artikel ini. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!