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.