Giriş
Bu araç ile hafıza kullanımı görsel olarak görülebilir.
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\ folder2. Right-click on one of the Java process3. Click on the ‘Heap Dump’ option on the drop-down menu4. Heap dump will be generated5. 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.
Şöyle yaparızVisualVM requires a compatible Java version. If VisualVM is unable to find Java installed on the system configure it in <<VisualVmFolder>>/etc/visualvm.conf.
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
ÖrnekAğaç yazısına taşıdım
Şöyle yaparız
visualvm.exe \--jdkhome "C:\Software\Java\jdk1.6.0" \--userdir "C:\Temp\visualvm_userdir"
Ağaç
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.
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
Profiler Sekmesi yazısına taşıdım
Hiç yorum yok:
Yorum Gönder