Menggunakan parameter HeapDumpOnOutOfMemoryError untuk heap dump untuk JBoss

182

Saya diberitahu bahwa saya dapat menambahkan -XX:+HeapDumpOnOutOfMemoryErrorparameter ke opsi start up JVM saya ke skrip start up JBoss saya untuk mendapatkan heap dump ketika kita mendapatkan kesalahan memori di aplikasi kita. Saya bertanya-tanya di mana data ini dibuang? Apakah hanya untuk konsol, atau untuk beberapa file log? Jika hanya untuk konsol, bagaimana jika saya tidak masuk ke server Unix melalui konsol?

Dmitry Trunov
sumber
1
Itu folder saat ini, saya kira.
Valentin Tihomirov

Jawaban:

246

Inilah yang dikatakan dokumentasi Oracle :

Secara default heap dump dibuat dalam file bernama java_ pid .hprof di direktori kerja VM, seperti pada contoh di atas. Anda dapat menentukan nama file alternatif atau direktori dengan -XX:HeapDumpPath=opsi tersebut. Misalnya -XX:HeapDumpPath=/disk2/dumps akan menyebabkan tumpukan tumpukan dihasilkan di /disk2/dumps direktori.

Matt Solnit
sumber
16
Ini juga mencantumkan semua opsi terkait kinerja VM: java.sun.com/javase/technologies/hotspot/…
Ravi Gupta
4
Penting! Bendera HeapDump hanya tersedia dari Java 1.5.0_07.
rustyx
14
Juga penting untuk mengetahui bahwa JVM TIDAK akan menimpa dump heap yang ada di HeapDumpPath, Anda akan melihat sesuatu yang mirip dengan "Unable to create /tmp/java_pidpid.hprof: File exists"standar keluar Anda. Pastikan untuk memindahkan file dump Anda keluar dari jalur dump untuk menghapus jalan bagi file dump masa depan; dan memanfaatkan <pid>placeholder dalam nama file untuk meningkatkan entropi dalam nama file.
Ben
1
Itu sangat berguna. Butuh beberapa menit untuk menemukan kebocoran dengan Eclipse Memory Analyzer.
Aron Lorincz
Apa yang terjadi jika kita memberikan path ke folder yang tidak ada di sistem? Apakah itu akan membuat folder dan mendorong punuk dump dalam folder itu?
Vinit89
47

Anda dapat melihat dump ini dari konsol UNIX.

Path untuk heap dump akan diberikan sebagai variabel tepat setelah Anda menempatkan variabel yang disebutkan.

Misalnya:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DOMAIN_HOME}/logs/mps"

Anda dapat melihat dump dari konsol di jalur yang disebutkan.

Swaminathan Krishnamoorthi
sumber
4

Saya merasa sulit untuk menguraikan apa yang dimaksud dengan "direktori kerja VM". Dalam contoh saya, saya menggunakan program Java Service Wrapper untuk menjalankan toples - file dump dibuat di direktori tempat saya meletakkan program wrapper, misalnya c: \ myapp \ bin. Alasan saya menemukan ini adalah karena file-file dapat cukup besar dan mereka mengisi hard drive sebelum saya menemukan lokasi mereka.

B5A7
sumber
Direktori kerja Anda dapat ditemukan melalui perintah pwdx <PID>. Pertama lakukan ps -ef | grep java, cari PID Anda untuk aplikasi java Anda, lalu jalankan pwdx <PID>. Ini akan memberi tahu Anda direktori kerja.
RCG
2

Jika Anda tidak menggunakan opsi "-XX: HeapDumpPath" maka dalam kasus JBoss EAP / As secara default file dump tumpukan akan dihasilkan dalam direktori "JBOSS_HOME / bin".

Swapnil Chaudhari
sumber