Bir SVG Alev Grafiği ile Uygulamanızın Performansını Nasıl Görselleştirirsiniz?
Yayınlanan: 2023-02-21SVG alev grafikleri, uygulamanızın performansını görselleştirmenin harika bir yoludur. Her işlevde harcanan süreyi görüntüleyerek, kodunuzun çok fazla zaman alan alanlarını hızlı bir şekilde belirleyebilirsiniz. Bir SVG alev grafiğini görüntülemek için, bir tane oluşturabilecek bir araç kullanmanız gerekecektir. Flamegraph.io gibi birçok açık kaynaklı araç mevcuttur. Alev grafiğinizi oluşturduktan sonra, bir etiket kullanarak web sitenize veya blogunuza yerleştirebilirsiniz. Alev grafiğinizi görüntülemek için Google E-Tablolar gibi bir araç da kullanabilirsiniz. Basitçe yeni bir e-tablo oluşturun, "Ekle > Resim"i seçin ve ardından alev grafiğinizin URL'sini yapıştırın.
Bir Alev Grafiğini Nasıl Çalıştırırsınız?
Bir alev grafiği çalıştırmak için bilgisayarınızda birkaç şeyin kurulu olması gerekir. İhtiyacınız olan ilk şey Google Chrome tarayıcısıdır. Ardından, Flame Graph uzantısını yüklemeniz gerekir. Bunların ikisini de yükledikten sonra, Google Chrome tarayıcısını açmanız ve Flame Graph uzantı sayfasına gitmeniz gerekir. Oradan, “Yeni bir Alev Grafiği Oluştur” düğmesine tıklamanız gerekecek. Bu, alev grafiği oluşturmak istediğiniz web sitesinin URL'sini girmeniz gereken yeni bir sekme açacaktır. URL'yi girdikten sonra, “Alev Grafiği Oluştur” düğmesine tıklamanız gerekecektir. Bu, alev grafiğini oluşturmak için birkaç dakikanızı alacaktır. Tamamlandığında, sonuçları görebileceksiniz.
Alev grafiği, dağıtılmış bir istek izini ve isteğin yürütülmesi sırasında gerçekleşen her hizmet çağrısının bir özetini görüntüler. Dağıtılmış izlerin alev grafikleri, geliştiricilerin uygulamalarında darboğazları belirlemesine yardımcı olmak için gecikme ve hata verilerini gösterir. Makale, bir alev grafiğinin nasıl yorumlanacağına ilişkin bir açıklamanın yanı sıra bir örneğin yanı sıra dağıtılmış izleri izlemek için diğer yöntemleri de sağlar. Y ekseni, çağrı yığınının derinliğini (çağrı sayısı) gösterir. Bir alev grafiğinde bir aralığa tıkladığınızda, genellikle sürenin bir özetini ve çağrıyla ilişkili hatayı görürsünüz. Alev grafiğinin altındaki sekmelere tıklayarak ölçümleri, günlükleri, ağ performans verilerini, kod sıcak noktalarını ve diğer bağlamsal bilgileri bulabilirsiniz. Spiral diyagram, bir dizi halkayla çevrili bir daireden oluşur. Alev grafikleri, bir kod profil oluşturucudan gelen bir isteği yerine getirirken kullanılan yöntemleri ve kod yollarını görselleştirmek için kullanılabilir. Datadog Uygulama Performansı İzleme ve Dağıtım izleme araçları, tüm hizmetlerdeki tüm isteklerin yolunu takip etmenizi sağlar.
Alev Grafikleri, Geliştiricilere Performans Sorunlarını Görmenin Hızlı ve Kolay Bir Yolunu Sunar
Alev grafikleri, geliştiriciler tarafından dağıtılmış uygulamaların performansını saniyeler içinde görselleştirmek için kullanılabilir. Alev grafikleri, istek izinin grafiksel bir sunumunu sağlayarak ve uygulamanın nerede sorun yaşadığını vurgulayarak geliştiricilerin performans sorunlarını belirlemesine ve düzeltmesine yardımcı olabilir.
Flamegraph'ta Nasıl Arama Yaparsınız?
Flamegraph üzerinde arama yapmanın birkaç farklı yolu vardır. Bunun bir yolu, ekranın sağ üst tarafında bulunan arama kutusunu kullanmaktır. Bu arama kutusu, daha sonra alev grafiğini aramak için kullanılacak anahtar sözcükleri yazmanıza olanak tanır. Flamegraph üzerinde arama yapmanın başka bir yolu da gözatma işlevini kullanmaktır. Bu işlev ekranın sol tarafında bulunabilir. Bu işlev, farklı alev grafiği kategorileri arasında gezinmenizi sağlar.
Alev grafiklerinin ortaya çıkmasıyla, onları aramak artık daha kolay. Sağdaki büyük TCP_send() çerçevesinin altında bir yazma kodu yolu vardır. Vurgulanan çerçevelerden birine tıklarsanız, bunun neden olabileceğini görebilirsiniz. Test edilen örneklerin %59,1'inde Tcp_Send mevcuttu. Aranacak diğer ilgi çekici terimler arasında re?cv, döndürme, kopyalama ve x bulunur.
Neden Alev Grafiği Denir?
Bir görselleştirme oluştururken Neelakanth ve Roch tamamen rastgele renkler kullandı. CPU sıcaktı (meşgul), bu da neden önce sadece sıcak renkleri seçtiğimi açıklıyor. Alevlere benzediği için alev grafikleri hızla popüler oldu.
Alevlerin Tehlikeleri
Ateşli olay, hayal kırıklığını ortadan kaldırmanın ve canlı bir tartışma başlatmanın eğlenceli bir yoludur. Ayrıca ilişkilerde bozulmaya yol açabilir ve insanların dağılmasına neden olabilirler.
Alevlerle baş etmenin en iyi yolu onları görmezden gelmektir. Birisi bir alev gönderebilir; görmezden gelen sen olmalısın. Cevap vermeye gerek yok. Harcanan enerjiye değmez.
Alev, iletişim kurmanın eğlenceli bir yolu olabilir, ancak bazı durumlarda yanlış kullanıldığında zararlı da olabilir. Alevlerden korkmanıza gerek yok; bunun yerine onlardan kaçınmalı ve sakin kalmalısınız.
Flamegrafları kim icat etti?
Alev grafikleri, birçok dilde olduğu kadar Netflix ve diğer sektörlerde de performans analizi için önemli bir araç haline geldi. Yazarları Brendan Gregg, Communications of the ACM'nin Haziran 2016 sayısında yayınlanan Alev Grafiği'ni yarattı.
Alev Grafik Görüntüleyici
Alev grafiği görüntüleyici, kullanıcıların verileri grafik biçiminde görselleştirmesine olanak tanıyan bir yazılım türüdür. Bu yazılım genellikle bilgisayarlar veya diğer cihazlarla ilgili sorunları gidermek için kullanılır.
Büyük performans profillerine web tabanlı bir şekilde bakmak için speedscope'u kullanabilirsiniz. Brendan Gregg tarafından hazırlanan FlameGraphs, Chrome geliştirici araçlarının performans panelinden ilham almıştır. Sistemden gelen veriler herhangi bir sunucuya aktarılmaz ve tamamen tarayıcı içinde çalışır. Chrome ve Firefox tüm platformlarla çalışmalıdır (yalnızca Mac'i test etmiş olmama rağmen). Soldaki ağır görünümde, ardışık olarak kaydedilip kaydedilmediklerine bakılmaksızın aynı yığınlar birlikte gruplandırılır. Her ebeveynin yığını, en ağır yığını solda olacak şekilde sıralanır - dolayısıyla solak etikettir. Durumun ayrıntılı bir görünümü, belirli bir durumda kaç işlev çağrınız olduğu açısından nerede olduğunuzu anlamanıza yardımcı olacaktır.
Rudro Samanta, Xcode kullanılarak yakalanan iOS uygulama profillerini görselleştirmek için speedscope kullanıyor. Jest, test senaryoları yazmak için kullanılır, Travis CI, kodu sürekli olarak entegre etmek için kullanılır, Tulumlar, test kapsamı raporlaması için kullanılır, Parcel, kaynak kodunu dönüştürmek için kullanılır ve daha güzel, kodu otomatik olarak biçimlendirmek için kullanılır. Bunu başarmanın bir yolu, speedscope'un içe aktarabileceği format sayısını artırmak ve entegrasyonları daha sıkı hale getirmektir. Dokuz aydır hız dürbünü üzerinde çalışıyorum ve sanki benden uzaklaşmasına izin vermişim gibi hissediyorum. Bir mühendis olarak, dünyanın her yerindeki karmaşık sorunları çözmede insanlara yardımcı olmak için bakımı yapılabilir, anlaşılır ve kullanışlı sistem ve araç setleri oluşturmaya çalışacağım. Bu yıl yaratıcı ve ortak projelere daha fazla zaman ayıracağıma inanıyorum.
Çevrimiçi Alev Grafiği
Bir alev grafiği, tipik olarak yazılım programlarının performans özelliklerini göstermek için kullanılan, profil oluşturma verilerinin grafiksel bir temsilidir. Her bölümün yüksekliği, kodun o bölümünde harcanan süreyi temsil eder. Bölümler, ne zaman çağrıldıklarına göre soldan sağa sıralanır.
Ağaçların ve grafiklerin aksine alev grafikleri, büyük miktarda bilgiyi küçük bir formatta sunarak ekran alanını etkin bir şekilde kullanır. Buraya tıklayarak, bir ağacın alev grafiğine nasıl dönüştürüleceğini ve alev grafiğinin temel özelliklerinin neler olduğunu öğreneceksiniz. Alev Grafikleri, profil oluşturma verilerini görüntülemek için Google Cloud Profiler'da kullanılır. Bir çağrı yığınını takip ettiğinizde, aranan bir kişinin toplam CPU süresi, başka bir aranan kişinin CPU süresinden fazla olamayacağından, çerçevelerin genişlikleri azalır. Alev şekli bu davranıştan kaynaklanır. Fazla boşluk kaldırıldıktan ve öz CPU zamanı kullanılarak çerçeveler renklendirildikten sonra alev grafiği artık aşağıdaki gibi görünür. foo1 ve foo2 için çağrı yığınları korunmuş olsa da, foo2 ile başlayan ve foo1 ile biten yığın artık çerçevenin yanında yer almaktadır.
Alev Grafiği Nasıl Yapılır?
Alev grafikleri oluşturmak için önce yığın izini örneklemeniz gerekir. Geleneksel olarak iki türe ayrılmıştır: Linux perf gibi sistem kod yollarını gösteren (örn. JVM GC, sistem çağrıları, TCP) sistem profilleri, ancak Java profillerini göstermez. Hprof, lJP ve ticari profil oluşturucular gibi JVM profil oluşturucular mevcuttur.
Alev Grafiği Vs Alev Grafiği
Alev grafiği ile alev grafiği arasında birkaç önemli fark vardır. Bir alev grafiği tipik olarak olayların bir zaman çizelgesini gösterirken, alev grafiği bir yığın izini gösterir. Alev grafikleri genellikle performans sorunlarını gidermek için kullanılırken, alev grafikleri daha çok performans verilerini görselleştirmek için kullanılır. Alev çizelgeleri, bir programın zamanını nasıl geçirdiğini görmenin harika bir yoludur. Size darboğazların nerede olduğunu ve programın kaynakları nasıl kullandığını gösterebilirler. Alev grafikleri, bir programın kaynakları nasıl kullandığını görmenin harika bir yoludur.
Hangi kod yollarının sıcak olduğunu belirlemek için kaba ama yararlı bir teknik olarak (çünkü CPU ile meşguller), sabit bir oranda profil oluşturma iyi sonuçlar verir. Alev grafikleri, yığın izlerini örnekleyerek sıcak kod yollarını hızlı bir şekilde tanımlamanıza olanak tanır. Linux perf (perf_events) ve DTrace örneklerim, yükleyebileceğiniz yazılım örnekleridir. FlameGraph, etkileşimli bir SVG oluşturan ve resimleri sürükleyip bırakarak ayrıntıları görmenizi sağlayan bir Perl aracıdır. Görselleştirme, profil oluşturucuların diğerlerine benzer görünebilir, ancak bazı açılardan onlardan farklıdır. Bu başlangıçta CPU'da neyin sıcak olduğunu görselleştirmek için kullanıldığından, alev grafiği olarak adlandırıldı. Daha yeni Linux çekirdeklerinde daha düşük maliyetli çalıştırma yöntemi için eBPF profili(8) bölümüne bakın (eBPF profili(8) önerilmez).
Perf hakkında daha fazla bilgi için lütfen perf_events sayfamın Alev Grafikleri bölümüne bakın. Yalnızca stackcollapse-perf.pl kullanılarak erişilebilen bir katlama modu dahil edilerek doğrudan Linux 4.5 perf raporundan katlanmış çıktının çıktısını almak mümkündür. Kullanıcı ve çekirdek yığınları (-f) ile ayrılmış bir çekirdek (-a) ve kullanıcı (-d) dizisi bu örnekte 99 Hertz'de (-F 99) sağlanır ve örnekler için 60 saniyelik bir zaman sınırı vardır. Alev grafikleri, Fedora 16'da SystemTap v1.7 kullanılarak oluşturulabilir. Zamanlayıcı, yığın izlerini örneklemek için de kullanılabilir. Bu profil araştırması, sistem saat hızında (CONFIG_HZ) çalışır. SystemTap, çekirdek içi birleştirmek ve kullanıcılara (daha az ayrıntılı) bir rapor iletmek için systemTap toplama özelliğini kullanabilir.
Grafikler, bir Fedora 16 konuğunda (bir sanal CPU ile) KVM (Ubuntu ana bilgisayarı) (32 bit) kullanılarak oluşturulmuştur. Bare metalde, bazı kod yolları ve örnekleme oranları çok farklı olacaktır. Yüzdeleri görmek için profil oluşturma verilerindeki öğelerin üzerine tıklamak mümkündür (ancak bu yeni bir sürüm olduğu için yakınlaştırmak için tıklatmayın), ancak yakınlaştırmak mümkün değildir. Grafik, Linux'un dahili bileşenleri hakkında daha fazla bilgi edinmek için mükemmel bir araçtır. Bir illumos çekirdek hipervizörü ana bilgisayarında, bu örnekte hem kullanıcı hem de çekirdek yığını görülebilir. Bağımsız SVG ve PNG sürümleri de mevcuttur. Kısa ömürlü süreçler oluşturmak için çekirdek zamanının nasıl tahsis edildiğini gözlemlemek için bu alev grafiğinin bir iş yükünü gerçekleştirdim.
Bir alev grafiği tipik olarak kılları görüntüleyerek çekirdek kesme yükünü belirlemek için kullanılır. Ubuntu sürüm 1716'daki NUMA Dengeleme, düğümler arasındaki belleği dengelemek için CPU döngülerinin yarısından fazlasını tüketir ve bu da yavaş bir performansa neden olur. D3'teki alev grafiğinin yeniden yazılması, alev grafiğini yeniden oluşturmak zorunda kalmadan birleştirme siparişlerini sabit tutmak için gereklidir. JavaOne 2016 konuşmamda, Alev Grafikleri ile Linux'ta Java Performans Analizi'nde, Linux perf kullanarak karma mod alev grafikleri üretmek için en son teknikleri ele alıyorum. JDK8u60, perf ve alev grafikleri oluşturmanıza izin veren /PreservePointerFrame adlı bir özellik içerir. JDK-8068945, yığın profil oluşturma (çerçeve işaretçisi) için bir etkin yama olarak JDK kitaplığına eklendi. RBP kaydını x64 için derlenmiş kodda bir çerçeve işaretçisi olarak kullanırken, uygun çerçeve işaretçisi olarak kabul edilir.
DTrace bir Jstack yöntemi olarak çalıştırıldığında, Java yöntemleri ve sınıflarının yanı sıra kullanıcı düzeyindeki yığınları da izleyebilir. Java programlarında, CPU alev grafikleri oluşturmak için Stackcollapse.pl ve flamegraph.pl kullanılır. Bazı JVM sürümleri, çeşitli sorunları olan ustack yardımcısını desteklemez. Yalnızca CPU sayılarına sahip yığın izlemeleriyle değil, herhangi bir yığın izleme artı değer kombinasyonuyla çalışır. İlk sorun, Jstack()'in, 2005'te dosyalanan ve 2014 itibariyle hala düzeltilmemiş olan JDK-6260864 hatası nedeniyle yığınları düzgün bir şekilde yürütemeyebileceğidir. Bu hata, üretim iş yüklerimde numune yığınlarının çoğunun kırmak. Cihazın bellek tahsisi, cihaz IO'su, sistem çağrı kalıpları, CPU dışı olaylar ve belirli işlev çağrıları hakkında fikir edinebilirsiniz. Bunlardan herhangi biri kullanılırsa, ilgili değerle bir yığın izleme elde edilebilir: sayım, bayt veya gecikme. Alev grafikleri ayrıca Alev Grafikleri sayfasından da görüntülenebilir.
Alev Grafiği Java
Alev grafiği, bir yazılım programının performansını temsil etmek için kullanılan bir veri görselleştirme türüdür. Bir programın her fonksiyonda harcadığı süreyi gösteren bir grafiktir. Çubukların yüksekliği, programın o işlevde harcadığı süreyi temsil eder. Çubukların genişliği, programın diğer işlevlere göre o işlevde harcadığı süreyi temsil eder.
Alev grafikleri, son zamanlarda Java'da CPU kullanımını görselleştirmenin popüler ve yeni bir yolu olarak ortaya çıkmıştır. Google'ın hafif Java profil oluşturucusu (code.google.com) ve alev grafik yazılımım (github) kullanılarak oluşturulabilirler. Alev grafiklerinin gelecekte Java profil oluşturuculardan ayrı bir özellik olmaması iyi bir şey . Bu blog gönderisinde, çalışırken bazı sınırlamaları olan, yalnızca Java JVMTI tabanlı bir yönteme bakacağız. Jeremy Manson, CPU'yu örneklemek için kullanılabilecek hafif bir Java profil oluşturucu yarattı. Bu örnek rapor, java başladığında, eklenmiş bir trace.txt dosyasıyla çıkana kadar oluşturulur. Programı çalıştırmak için birkaç maliyet vardır.
Programım için küçüktü (istek oranında yalnızca %1'lik bir artış ve CPU tüketiminde %7'lik bir artış). Örnekleme oranının düşürülmesi gerekiyorsa, lütfen sonraki bölümlere bakın. Flamegraph.pl programının çıktısı, başlık da dahil olmak üzere çeşitli seçeneklerle (list -h) özelleştirilebilir. Aynı profil oluşturma tekniğine dayanan Richard Warburton'ın dürüst profil oluşturucusu da işe yarar. Uzun bir süre boyunca büyük miktarda veri toplamayı planlıyorsam, örnekleme hızını 100 hertz'den 50 hertz'e veya altına düşürmem mümkündür.