JBoss için yığın dökümü için HeapDumpOnOutOfMemoryError parametresini kullanma


182

Ben -XX:+HeapDumpOnOutOfMemoryErrorbizim uygulamada bellek yetersiz hatası aldığımızda bir yığın dökümü almak için benim JBoss başlatma komut benim JVM başlatma seçenekleri için parametre ekleyebilirsiniz söylendi . Bu verinin nereye atıldığını merak ediyordum? Sadece konsola mı yoksa bazı günlük dosyalarına mı? Yalnızca konsola yönelikse, konsoldan Unix sunucusunda oturum açmazsam ne olur?


1
Şu anki klasör bu, sanırım.
— Valentin Tihomirov

Yanıtlar:


246

İşte ne Oracle'ın belgelerine şöyle demektedir:

Varsayılan olarak yığın dökümü, yukarıdaki örnekte olduğu gibi VM'nin çalışma dizininde java_ pid .hprof adlı bir dosyada oluşturulur . -XX:HeapDumpPath=Seçenek ile alternatif bir dosya adı veya dizin belirtebilirsiniz . Örneğin -XX:HeapDumpPath=/disk2/dumps , yığın dökümü /disk2/dumps dizinde oluşturulmasına neden olur .


16
Bu ayrıca VM performansıyla ilgili tüm seçenekleri de listeler: java.sun.com/javase/technologies/hotspot/…
— Ravi Gupta

4
Önemli! HeapDump bayrakları yalnızca Java 1.5.0_07'den edinilebilir.
— rustyx

14
Ayrıca, JVM'nin mevcut bir yığın dökümü üzerine YAZMAYACAĞINIZ , standart çıkışınızda HeapDumpPathbenzer bir şey göreceğinizi "Unable to create /tmp/java_pidpid.hprof: File exists"bilmek önemlidir . Gelecekteki döküm dosyalarının yolunu temizlemek için döküm dosyanızı döküm yolunun dışına taşıdığınızdan emin olun; ve <pid>dosya adındaki entropiyi artırmak için dosya adındaki yer tutucuyu kullanın .
— Ben

1
Son derece yararlı oldu. Eclipse Memory Analyzer ile sızıntıyı bulmak sadece birkaç dakika sürdü.
— Aron Lorincz

Sistemde bulunmayan bir klasöre yol verirsek ne olur? Klasör oluşturacak ve bu klasördeki kamburluğu alacak mı?
— Vinit89

47

Bu dökümü UNIX konsolundan görüntüleyebilirsiniz.

Yığın dökümü için yol, söz konusu değişkeni yerleştirdikten hemen sonra bir değişken olarak sağlanacaktır.

Örneğin:

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

Dökümü, belirtilen yoldaki konsoldan görüntüleyebilirsiniz.


4

Ben "VM çalışma dizini" ne anlama geldiğini deşifre etmek zor buldum. Örneğimde, bir kavanoz yürütmek için Java Service Wrapper programını kullanıyordum - döküm dosyaları sarma programını yerleştirdiğim dizinde oluşturuldu, örneğin c: \ myapp \ bin. Bunu keşfetmemizin nedeni, dosyaların oldukça büyük olabilmesi ve konumlarını keşfetmeden önce sabit sürücüyü doldurmalarıydı.


Çalışma dizininiz pwdx <PID> komutu ile bulunabilir. İlk önce bir ps -ef yapın | grep java, java uygulamanız için PID'nizi bulun, sonra pwdx <PID> 'yi çalıştırın. Size çalışma dizinini söyleyecektir.
— RCG

2

"-XX: HeapDumpPath" seçeneğini kullanmıyorsanız, JBoss EAP / As durumunda varsayılan olarak yığın döküm dosyası "JBOSS_HOME / bin" dizininde oluşturulur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.