6 Mart 2020 Cuma

jvisualvm Aracı

Giriş
Bu araç ile hafıza kullanımı görsel olarak görülebilir.

Kurulum
https://visualvm.github.io/download.html adresinden indirir ve kurarız

Heap Dump
Heap dump almanın iki yolu var.
1. Sample alınır ve onun heap dump'ı alınır. Bunu aşağıda anlattım
2. Çalışmakta olan uygulamanın heap dump'ı alınır. Çalışmakta olan uygulamanın heap dump'ını almak için şöyle yaparız. Yani direkt soldaki ağaç üzerinde sağ tıklayarak yapıyoruz. 
Steps:

1. Launch jvisualvm under \bin\ folder
2. Right-click on one of the Java process
3. Click on the ‘Heap Dump’ option on the drop-down menu
4. Heap dump will be generated
5. File path where heap dump is generated will be specified in the Summary Tab > Basic Info > File section
Komut Satırı
visualvm.conf Dosyası

Örnek - Cannot find Java 1.8 or higher hatası
Açıklaması şöyle. Visualvm Java kurulumunu bulamadı anlamına gelir.
VisualVM requires a compatible Java version. If VisualVM is unable to find Java installed on the system configure it in <<VisualVmFolder>>/etc/visualvm.conf
Şöyle yaparız
visualvm_jdkhome=F:/MyDevelopment/jdk-19
Ben şöyle yaptım
visualvm_jdkhome=D:/Kurulumlar/JDK/jdk-17_windows-x64_bin/jdk-17.0.1
--jdkhome seçeneği
Örnek
Şöyle yaparız
visualvm.exe \
  --jdkhome "C:\Software\Java\jdk1.6.0" \
  --userdir "C:\Temp\visualvm_userdir"
Ağaç
Ağaç yazısına taşıdım

1. Monitor Sekmesi
Monitor Sekmesi yazısına taşıdım

2. Threads Sekmesi
Thread'ler hakkında yine genel bir fikir verir.

3. Sampler Sekmesi
Periyodik olarak CPU ve Memory hakkında bilgileri yeniler.

3.1 Sampler/CPU Sample
1. En çok CPU kullanan metodları gösterir.

Sel Time Sütunu
Metod bir şeyin üzerinde bloke olsa bile Self Time olarak sayılmaya devam ediyor.

Sel Time (CPU) Sütunu
Metod bir şeyin üzerinde bloke olsa bile bu sayaca dahil edilmiyor. Yan en çok optimize edilecek kodlara bakmak istersek bu alana göre sıralamak gerekir.

3.2 Sampler/Memory Sample
Heap histogram Sekmesi
Yüklü olan sınıfları gösteriyor.

Per thread allocations Sekmesi
Bir thread tarafından kullanılan bellek miktarını gösteriyor.

1. Sampler içinde "Heap Dump" seçeneği kullanılarak dump alınır. Böylece bir nesneye kimin tarafından referans tutulduğu görülebilir.

2. Sampler içinde "Snapshot" alınabilir. Bunun tam olarak ne işe yaradığını bilmiyorum

Sampler/Heap Dump
Bunu kullanarak nesnenin neden garbage collector tarafından temizlenmediğini bulmak mümkün. Açıklaması şöyle.
To do it in VisualVM, in the Sampler or Profiler view there is a button (top right) labeled "Heap Dump". Click this, which opens the heap analyser. Under the "Classes" tab, all loaded classes are shown. At the bottom there is a search box, type the class name you are interested in, in the filtered view double click the class in question.

This opens the instances view. Right-click an instance int the left pane, and select "Show Nearest GC Root" to find what is referencing the object.
Şeklen şöyle

Size Sütununa Göre Sıralamak
Açıklaması şöyle. Bir tipin kullandığı tüm bellek

Retained Size Sütununa Göre Sıralamak
Açıklaması şöyle. Bir nesneye bağlı toplam bellek demek
When the objects are sorted by size you get a char[] at the top holding over 700Mb memory. Not very helpful is it? A char[] could be anything.
Now let’s sort it by Retained Size. Retained Size can be thought of as the size of the entire object graph under a particular object. 
Dominators Preset Seçimi
Açıklaması şöyle.
In the heap, an object is considered to dominate another object if all references to the second object goes through the first object. So this is exactly what we want — the root object of the object graph holding the unusually large amount of memory.
Şeklen şöyle


Profiler Sekmesi
Profiler Sekmesi yazısına taşıdım

Hiç yorum yok:

Yorum Gönder