Çoğu zaman, kurumsal uygulamalarda verilen Java yığını maksimum 12 ila 16 GB'lik ideal boyuttan daha büyüktür. NetBeans profillerinin doğrudan bu büyük java uygulamalarında çalışmasını zor buldum.
Ancak genellikle buna gerek yoktur. "Canlı" yığın dökümü almak için jdk ile gelen jmap yardımcı programını kullanabilirsiniz, yani jmap GC çalıştırdıktan sonra yığını dökecek. Uygulamada biraz işlem yapın, işlem tamamlanana kadar bekleyin, ardından bir başka "canlı" yığın dökümü alın. Yığın dökümlerini yüklemek, histogram üzerinde sıralamak, hangi nesnelerin arttığını veya hangisinin en yüksek olduğunu görmek için Eclipse MAT gibi araçları kullanın, Bu bir ipucu verecektir.
su proceeuser
/bin/jmap -dump:live,format=b,file=/tmp/2930javaheap.hrpof 2930(pid of process)
Bu yaklaşımla ilgili tek bir sorun var; Devasa yığınlar, canlı seçenekle bile, geliştirme turuna aktarılamayacak kadar büyük olabilir ve açmak için yeterli belleğe / RAM'e sahip bir makineye ihtiyaç duyabilir.
Sınıf histogramı bu noktada devreye girer. Canlı sınıf histogramını jmap aracıyla dökebilirsiniz. Bu sadece bellek kullanımının sınıf histogramını verecektir. Örneğin char dizisini en üste koyabilir. Ve aşağıda bir yerde String sınıfı. Bağlantıyı kendiniz çizmelisiniz.
jdk/jdk1.6.0_38/bin/jmap -histo:live 60030 > /tmp/60030istolive1330.txt
İki yığın dökümü almak yerine, yukarıda açıklandığı gibi iki sınıf histogram alın; Sonra sınıf histogramlarını karşılaştırın ve artan sınıfları görün. Java sınıflarını uygulama sınıflarınızla ilişkilendirip ilişkilendiremeyeceğinize bakın. Bu oldukça iyi bir ipucu verecektir. İki jmap histogram dökümünü karşılaştırmanıza yardımcı olabilecek bir piton komut dosyası. histogramparser.py
Son olarak JConolse ve VisualVm gibi araçlar zaman içinde bellek büyümesini görmek ve bellek sızıntısı olup olmadığını görmek için gereklidir. Sonunda bazen probleminiz bir bellek sızıntısı değil, yüksek bellek kullanımı olabilir. Bunun için GC günlük kaydını etkinleştirin; G1GC gibi daha gelişmiş ve yeni bir sıkıştırma GC kullanın; GC davranışını canlı olarak görmek için jstat gibi jdk araçlarını kullanabilirsiniz
jstat -gccause pid <optional time interval>
-Jhat, jmap, Full GC, Humongous ayırma, G1GC için google'a diğer referanslar