Anda membingungkan dua dump java yang berbeda. kill -3
menghasilkan dump thread, bukan heap dump.
Thread dump = tumpukan jejak untuk setiap utas dalam output JVM ke stdout sebagai teks.
Heap dump = konten memori untuk output proses JVM ke file biner.
Untuk mengambil thread dump di Windows, CTRL+ BREAKjika JVM Anda adalah proses latar depan adalah cara paling sederhana. Jika Anda memiliki shell seperti unix di Windows seperti Cygwin atau MobaXterm, Anda dapat menggunakannyakill -3 {pid}
seperti yang Anda bisa di Unix.
Untuk mengambil thread dump di Unix, CTRL+ Cjika JVM Anda adalah proses foreground ataukill -3 {pid}
akan berfungsi selama Anda mendapatkan PID yang tepat untuk JVM.
Dengan platform mana pun, Java dilengkapi dengan beberapa utilitas yang dapat membantu. Untuk kesedihan thread, jstack {pid}
adalah taruhan terbaik Anda. http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html
Hanya untuk menyelesaikan pertanyaan dump: Heap dumps tidak umum digunakan karena mereka sulit diinterpretasikan. Tetapi, mereka memiliki banyak informasi berguna di dalamnya jika Anda tahu di mana / bagaimana melihatnya. Penggunaan paling umum adalah menemukan kebocoran memori. Ini adalah praktik yang baik untuk mengatur -D
pada baris perintah java sehingga heap dump dihasilkan secara otomatis pada OutOfMemoryError, -XX:+HeapDumpOnOutOfMemoryError
Tapi, Anda juga dapat secara manual memicu heap dump, juga. Cara paling umum adalah dengan menggunakan utilitas java jmap
.
CATATAN: utilitas ini tidak tersedia di semua platform. Pada JDK 1.6, jmap
tersedia di Windows.
Contoh baris perintah akan terlihat seperti
jmap -dump:file=myheap.bin {pid of the JVM}
Output "myheap.bin" tidak dapat dibaca oleh manusia (bagi kebanyakan dari kita), dan Anda akan memerlukan alat untuk menganalisisnya. Preferensi saya adalah MAT. http://www.eclipse.org/mat/