linux

JAVA’da Heap Dump Almak

Sep 19, 2019 < 1 min

JAVA’da Heap Dump Almak

Heap dump, JVM’de hafızada bulunan tüm nesnelerin belirli bir andaki görüntüsü(snapshot)’dür. Java uygulamalarında memory-leak problemlerini gidermek ve bellek (RAM) kullanımını optimize etmek için çok kullanışlıdır.
Heap dump genellikle binary formatta olup hprof uzantılı dosyalarda saklanır. JVisualVM veya Eclipse kullanıcıları için MAT gibi araçlar kullanarak bu dosyaları açıp analiz edebiliriz.

jmap ile Dump Alma

jmap, çalışan bir JVM’deki bellek hakkındaki istatistikleri yazdırmak için bir araçtır. Kullanımı aşağıdaki gibidir.

jmap -dump:[live],format=b,file=<file-path> <pid>

Parametreler:
live: 
set edilmişse, yalnızca aktif referansları olan nesneleri basar ve garbage collector’ün temizlemesi için hazır olanları ihmal eder.
format = b: döküm dosyasının binary formatta olacağını belirtir. 
file: kaydeceği doya ismi ve yolu belirtilir.
pid: Java process ID
Java proses id’si aşağıdaki komut ile bulunabilir.

ps -ef | grep java

Örnek:

jmap -dump:live,format=b,file=/tmp/dump.hprof 12587

Jmap’in JDK’da deneysel bir araç olarak tanıtılmış veileride desteklenmeyebilir. Bu nedenle, bazı durumlarda jcmd gibi başka araçların kullanılması tercih edilebilir.

jcmd JVM’e komut göndermek için kullanılan araçtır. Heap dump için proses id’si belirtilerek GC.heap_dump komutu gönderilir.

Örneğin:

jcmd 12587 GC.heap_dump /tmp/dump.hprof

Dumpların Analiz Edilmesi
JVisualVM, Java uygulamalarını izlememize, sorun gidermemize ve profilini çıkarmamıza izin veren grafiksel bir kullanıcı arayüzüne sahip bir araçtır. Basit bir kullanıma sahiptir.

Seçeneklerinden biri, bir yığın dökümü yakalamamıza izin veriyor. File (Dosya) -> Load (Yükle) seçeneğini seçersek alınan dump seçilir. Araç bir heap dump oluşturur ve yeni bir sekmede açar.

Dump incelemede henüz çok yeniyim. O yüzden bu yazımda  dump analizine çok değinemeyeceğim. İzlediğim yol ise memory kullanımı normalken ve anormalken 2 faklı dump alıyorum ve bu dumpları karşılaştırıyorum.

Umarım faydalı olmuştur. İyi çalışmalar dilerim. 

Your email address will not be published. Required fields are marked *