Skip to main content
search

Hız açısından fark edilir değişiklikler elde etmek ve bunun için gereken zamanı ve eforu önemsiz detaylarla tahmin yürüterek kaybetmemek için, konuya dair araçları kullanmak bu alandaki en pratik yaklaşımdır. Kirk Pepperdine ile gerçekleştirilen Java Performans Workshop çalışmamız Java Sanal Makine İyileştirmesi (JVM) ve araç olarak da Visualvm’in kullanımına dayanmaktaydı, bu yüzden bu blog yazısı da bu konulara odaklanacaktır.

Performans düzenlenmesi, sistemin koordineli bir şekilde yüksek yüke maruz kaldığında, ölçeklenebilirliğini artırmak için verimini geliştirmek adına yapılan çalışmalar olarak özetlenebilir. Ani ve yüksek yük ile karşılaşıldığında, aplikasyonun bir kısmı cevap verme kapasitesine ulaşır ve bu da, sistem performansını yavaşlatır. Çoğunlukla böyle bir durumla karşılaşıldığında, iyileştirme için ilk adım tahmin yürütmek olur. Mesela, koddaki yinelemeler veya küresel değişkenler başlangıç noktamız olabilir, her ne kadar bu tahminler tecrübelerimiz gibi güçlü bir dayanağa sahip olsalar da, her zaman zayıf halka olmayabilirler, hatta bu örnekteki çözülmesi gereken ilk sorun string bağlama olabilir. Dolayısıyla, uygulamadaki diller için uygun araçların kullanımı ile birlikte sistematik bir yaklaşım ve standart prosedürler izlenmesi, yapılan iyileştirmeleri garanti altına alır ve nokta atışı ile bu iyileştirmelerin süresini kısaltır.

Dilden bağımsız olarak performans iyileştirmesinin temel prensipleri, aşağıda verilen şekilde belirtilebilir:

1) Gözlemlerdeki önyargıların, teşhis sonuçlarında hız kazanarak artmasından ötürü sokak lambası iyileştirmesinden, araçlarda sadece önemli şeylerle ilgilenmeden, kaçınılmalıdır.
2) Kavram teorisini göz önüne alarak (her sistemin genel performansını azaltan bir tane kusuru vardır), zayıf halka kaldığı sürece, sorun yaratmayanı düzeltmek, programın geri kalan kısımlarını hızlandırmak için kayda değer bir farklılık yaratmayacaktır. Bu yüzden, ihtiyacımız olan aslında fazla-iyileştirme yapmak değil, iyileştirmelerimizde önemli ve fark yaratabilecek kısımlara odaklanmaktır.
3) Gerçek zayıf noktayı tespit etmek için profiler ürünleri kullanmalıyız. İyileştirme en büyük zayıf halkaya uygulanır ve hızda fark edilir bir değişiklik görülene kadar süreç tekrar edilir.

JVM iyileştirmesinin odak noktası, performans gerilemesini ortadan kaldırmak için çöp toplayıcıyı, mimariyi ve kodu optimize etmektir. Visualvm, JVM’de, aynı anda hem yerel olarak hem de uzaktan çalışan birden fazla Java uygulamasının iş parçacıklarını, bellek tüketimini ve çalışma-zamanı davranışını izlemeye imkan sağlarken, uygulama performansını görüntülemede de (bellek tahsisini analiz etmek) ayrıntılı bilgi sağlar. İş paçacıklarını ve yığın atıklarına göz atmaya ve görüntülemeye izin verirken, aynı zamanda anlık görüntü almayı da destekler.

Monitör paneli olarak tanımlanabilecek genel VM durumları aşağıdaki resimde verilmiştir. Classes, sınıf sayısını temsil ederken; threads, parçacık sayısını görüntüler. Heaps tutulan nesneler ve dizileri belirtirken; metaspace, JVM ve sınıfların meta verileri için ayrı bir bellek olduğunu gösterir.

Aşağıda verilen ekran görüntüsü, örneklemenin başladığı andan itibaren her iş parçasının CPU tüketimini gösterir. Self time, her bir metodun kendi kodu için harcanan zamanı gösterirken (method kişisel tanımlanan başka bir methodu çağırıyorsa o çağırımlar hariç tutulur, dizi listesi için .add eylemi gibi eylemler bu çağırma türüne dahil değildir), toplam süre, çıkarılan bu çağrılan yöntemlerin süresini de içerir. Toplam cpu ise G/Ç (I/O) gibi bekleyen işlemler ve metotların gerçek CPU kullanımını kapsar.

İş parçacığı dökümü (Thread Dump) sorgulandığında, çalışan tüm iş parçacıklarının stack izleri listelenir. Bu panel, uygulamada çalışan iş parçacıklarını gösterirken, renkler bu parçacıkların durumunu gösterir ve bu sayede uygulamadaki parçacıkların genel durumları kolayca gözlemlenebilir. Buna istinaden, renklerden sarı bekleme durumundaki, turuncu izin bekleyen uzaklaştırılmış, yeşil aktif bir şekilde çalışan ve kırmızı ise tıkanan, engellenen parçacıkları belirtir.

Bellek örneklemesi sayesinde, aşağıdaki resimde görüldüğü gibi yığın nesnelerinin kapladığı alan ve ayak izlerini canlı olarak takip etmek mümkündür.

İdil Ağabeyoğlu

Keytorc

Close Menu