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?


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.


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.


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.


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".

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.