Performans analizi için gelecek vaadeden bir tool: Perfview
Merhaba arkadaşlar,
Önceki yazılarımızdan, yüksek memory kullanımı veya yüksek CPU kullanımı ile ilgili performans problemlerinin dump alınarak incelebileceğini belirtmiştik. Bugün yine popülerliği her geçen gün artan, başarılı bir performans analiz uygulamasından; ‘PerfView’ den bahsedeceğim.
Perfview arka planda kernel destekli ETW loglarını (ETL dosyaları) toplayarak performans analizinin yanısıra heap/memory kullanım analizi de yapabilmekte. Bu iki özellik kullanıcılara, menu üzerinde 2 farklı kategoride sunuluyor ve kullanımı oldukça pratik. Kullanımı 'windbg' ile karşılaştırıldığında komut tabanlı arayüzle barışık olmayan kullanıcılar için ideal. Uygulamanın çalışırken sisteme getirdiği yük de makul düzeylerde. Öyle ki tüm uygulamalara ait ‘event’ları toplarken %10 ‘un altında bir maliyetle (low overhead) çalışıyor.
‘Perfview’ uygulamasını Microsoft download Center üzerinden, ‘zip’ uzantılı olarak indirebilirsiniz. Paket içerisinde gelen uygulama kurulum gerekmeden doğrudan çalıştırılabiliyor. Uygulamanın kullanımı da oldukça pratik. Örnek vermek gerekirse, log toplamak için komut satırından ‘perfview /nogui collect’ yazmak yeterli.
'Perfview.exe' uygulaması .net üzerinde çalışıyor dolayısı ile uygulamanın çalışabilmesi için .net 4.0 framework’ün kurulu olması gerekli. Fakat memory analizi .net 2.0 ve üzeri tüm framework uygulamaları için yapılabiliyor. Diğer taraftan, 'Perfview.exe' sadece Vista (2008) yada üstü işletim sistemlerinde destekleniyor ( desteklenen işletim sistemleri: Windows 7, Windows 8, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 ve Windows Vista).
Önceden de bahsettiğimiz gibi menü üzerinde iki ayrı veri toplama türü mevcut. Bunlardan ‘Collect’ isimli menü öğesinde, çalışan tüm uygulamalar için İşletim sistemi ‘eventları’ (CPU usage, Disk I/O Page faults, Context Switches, File I/O, Network, Registry, … ) ve .NET Event’ları ( GCs, GC Stats, JIT compilation, ThreadPool, ASP.NET …) toplanıyor. Bu ‘event’lar toplanırken ilgili ‘call-stack’ler de kaydedilerek detaylı bir analiz imkani yaratılıyor.
Diğeri; Bellek analizi (‘Memory’ menüsü altında) için ise 2 farklı seçenek sunulmakta. Bunlardan bir tanesi önceden alınmış dump içerisindeki ‘heap’ kullanımını incelemek (‘Take Heap Snapshot from dump’) diğeri ise o an çalışan bir process’e bağlanarak ilgili process’in bellek kullanımı hakkında bilgi toplamak için kullanılıyor. ‘Perfview’ 10 GB’ın üstündeki heap kullanımları için verimli bir şekilde çalışabiliyor.
Uygulamanın gücü metrikler (toplanan veri) üzerinden gruplama yada ilişkilendirme yapabilmesinde. Şimdi ‘perfview’ verisinin yorumlanmasına ilişkin ufak bir örnek verelim.
‘Collect’ modunda toplanan ‘etw’ loglarını (*.etl), sol menü üzerinden, aşağıdaki gibi açarak, o anda çalışan tüm process’leri ve CPU kullanımlarını gösteren ‘Select a process Window’ ekranı ile karşılaşıyoruz. Aşağıda, cpu zamanı en yüksek olan ‘tutorial’ uygulamasını çift tıklayarak açıyoruz :
Yeni gelen ekranda ‘Tutorial’ isimli uygulamaya ait ‘CPU stack’ leri yer alıyor. Aşağıda kare içerisine aldığım özet bilgide 5644 adet stack ‘den 5192 adetinin ‘tutorial.exe’ isimli uygulamaya ait olduğu görülüyor. Bu oran Metric/msec olarak da belirtilmiş. Bu ‘metric/msec’ oranının 1’e yakın olması ‘tutorial.exe’ uygulamasının yüksek cpu kullanıyor olmasına işaret ediyor. Yani sistemden toplanan event'ların %92 si bu uygulamadan toplanmış.
Son olarak, aşağıdaki ‘mscorlib.ni!System.DateTime.get_Now()’ fonksiyonunun diğerlerine nazaran neden %84 civarında çağırılmış olduğunu bulmak kalıyor. Bunun için ise diğer tabları kullanabiliriz. Örneğin aşağıda ‘mscorlib.ni!System.DateTime.get_Now()’ fonksiyonunu çağıran fonksiyonlar görülüyor:
Perfview kullanımına dair en önemli kaynak, tool’un kendi ‘help’ içeriği. Bu içerik içerisinde ‘perfview.exe’ nin kullanımına ilişkin video’ları izleyebilir, ve UI üzerindeki yardım linklerine tıklayarak, o öğe hakkında detaylı bilgi edinebilirsiniz..
İyi çalışmalar,
Mert Öztürk