Performans ölçümü ve analizi örnekleri

Bu örnekler, belirli performans problemlerini ölçmek ve iyileştirmek için bellek profili oluşturmanın yanı sıra Makrobenchmark ile sistem izlemenin nasıl kullanılacağını gösterir.

Systrace kullanarak uygulama başlatmada hata ayıklama

Başlatma süresinde hata ayıklarken systrace günlüklerini kullanmanızı öneririz. Systrace, belirli etkinliklerin ne kadar süreceğine dair çıktıları almak için önceden donatılmış kod kullanan bir sistemdir. Bu izleri kullanarak uygulamanızda ve hatta sistemdeki diğer işlemlerde neler olduğunu görebilirsiniz. Android platformu ve Jetpack kitaplıkları, bir uygulamadaki birçok önemli etkinlikle ilgili araçlara sahiptir ve bunlar uygun şekilde günlüğe kaydedilir. Ayrıca, uygulamalarınıza kendi özel izlerinizi de ekleyebilirsiniz. Bu izler, uygulamada ne olduğuna dair genel bir resim sunmak için aynı sistem görselleştirme araçlarında gösterilir.

Systrace veya Perfetto kullanma

Temel systrace kullanımı hakkında daha fazla bilgi için şu videoyu izleyin: Uygulama Performansında Hata Ayıklama.

Başlatma süresini analiz etmek için öncelikle başlatma sırasında neler olduğunu anlamanız gerekir. Bu sayfada açıklananlardan daha fazla bilgi istiyorsanız Uygulama başlatma süresiyle ilgili belgelerden uygulama başlatma işlemine genel bir bakış sunulur.

Uygulama başlatma aşamaları şunlardır:

  • Süreci başlatma
  • Genel uygulama nesnelerini başlatma
  • Etkinlik oluşturma ve başlatma
  • Düzeni büyüt
  • İlk kareyi çizin

Startup türleri aşağıdaki aşamalardan oluşur:

  • Baştan başlatma: Uygulama, başlatıldıktan sonra ilk kez başlatıldığında veya uygulama işlemi kullanıcı ya da sistem tarafından sonlandırıldığında gerçekleşir. Başlangıç, kaydedilmiş durum olmadan yeni bir işlem oluşturur.
  • Hazır durumda başlatma: Bu, uygulama arka planda çalışırken ancak etkinliğin yeniden oluşturulması ve ön plana getirilmesi gerektiğinde ortaya çıkar. Etkinlik, mevcut işlem yeniden kullanılırken veya kaydedilmiş durumla yeniden oluşturulur. Makrobenchmark test kitaplığı, ilk seçeneği kullanarak tutarlı hazır durumda başlatma testini destekler.
  • Çalışırken başlatma: Bu durum, süreç ve etkinlik devam ederken yalnızca ön plana çıkarılmak, gerektiğinde bazı nesnelerin yeniden oluşturulması ve yeni ön plan etkinliğinin oluşturulması gerektiğinde ortaya çıkar. Bu, en kısa startup senaryosudur.

İzleri, Geliştirici Seçenekleri'nde bulunan cihaz üzerinde sistem izleme uygulamasını kullanarak kaydetmenizi öneririz. Komut satırı araçlarını kullanmak istiyorsanız Perfetto, Android 10 (API düzeyi 29) ve sonraki sürümlerle kullanılabilir. Önceki sürümlerdeki cihazlarda ise systrace.

Uygulamaların ilk etkinliği oluşturduktan sonra başlatma şekillerinde önemli farklılıklar olabileceğinden "ilk kare" teriminin biraz yanlış bir ad olduğunu unutmayın. Bazı uygulamalar birkaç kare için şişirmeye devam ederken diğerleri hemen ikincil bir etkinlik olarak başlatılır.

Mümkün olduğunda, uygulama açısından başlatma tamamlandığında bir reportFullyDrawn araması (Android 10 ve sonraki sürümlerde kullanılabilir) eklemenizi öneririz.

Bu sistem izlerinde bakmanız gerekenler:

Çakışmayı izle
Şekil 1. Monitörle korunan kaynaklar için rekabet, uygulama başlatmada önemli ölçüde gecikmeye yol açabilir.

Eşzamanlı bağlayıcı işlemleri
Şekil 2. Uygulamanızın kritik yolunda gereksiz işlemleri arayın.

Eşzamanlı çöp toplama
Şekil 3. Eşzamanlı çöp toplama yaygın bir durumdur ve nispeten düşük etkiye sahiptir. Ancak bu sorunla karşılaşıyorsanız genellikle Android Studio bellek profili aracını kullanarak araştırmayı düşünün.

Başlangıçta G/Ç
Şekil 4. Başlatma sırasında G/Ç olup olmadığını kontrol edin ve uzun duraklamalar olup olmadığına bakın.

Şekil 4'te, aynı anda G/Ç gerçekleştiren diğer işlemlerin G/Ç çakışmasına neden olabileceğini unutmayın. Bu nedenle, diğer işlemlerin çalışmadığından emin olun.

Diğer iş parçacıklarındaki önemli etkinlikler, kullanıcı arayüzü iş parçacığını etkileyebilir. Bu nedenle, başlatma sırasında arka plan çalışmasına dikkat edin. Cihazların farklı CPU yapılandırmalarına sahip olabileceğini, bu nedenle paralel olarak çalışabilecek iş parçacıklarının sayısının cihazlara göre değişebileceğini unutmayın.

Yaygın duraklama kaynakları ile ilgili kılavuza da göz atın.

Android Studio bellek profil aracını kullanma

Android Studio bellek profil aracı, bellek sızıntıları veya kötü kullanım kalıplarından kaynaklanabilecek bellek baskısını azaltmak için güçlü bir araçtır. Nesne ayırma ve koleksiyonlarının canlı görünümünü sağlar.

Uygulamanızdaki bellek sorunlarını düzeltmek amacıyla, çöp toplama işleminin neden ve ne sıklıkta gerçekleştiğini, ayrıca yığınınızın zaman içinde sürekli olarak artmasına neden olan olası bellek sızıntıları olup olmadığını izlemek için bellek profil aracını kullanabilirsiniz.

Uygulama belleğinin profili oluşturma işlemi aşağıdaki adımlara bölünür:

1. Bellek sorunlarını algılama

Bellek sorunlarını tespit etmek üzere önce uygulamanız için bellek profili oluşturma oturumu kaydedin. Ardından, bellek ayak izi artan bir nesne arayın. Bu nesne sonunda bir çöp toplama etkinliğini tetikler.

Nesne sayısını artırma
Şekil 5. Zaman içinde artan nesne ayırmaları gösteren bellek profil aracı.

Atık toplama
Şekil 6. Atık toplama etkinliklerini gösteren bellek profil aracı.{.:image-caption}

Bellek baskısına neden olan bir kullanım alanı belirledikten sonra temel nedenleri analiz etmeye başlayın.

2. Bellek baskısı etkin noktalarını teşhis etme

Hem ayırmaları hem de yüzeysel boyutu görselleştirmek için zaman çizelgesinde bir aralık seçin.

Ayırmaları ve yüzeysel boyutu görselleştirme
Şekil 7. Zaman çizelgesinde seçilen bir aralık için ayırmaları ve boyutları gösteren bellek profil aracı.

Bu verileri sıralamanın birden çok yolu vardır. Aşağıdaki bölümlerde, her bir görünümün sorunları analiz etmenize nasıl yardımcı olabileceğine dair bazı örnekler sunulmaktadır.

Sınıfa göre düzenle

Sınıfa göre düzenleme, başka bir şekilde önbelleğe alınması veya bir bellek havuzundan yeniden kullanılması gereken nesneler oluşturan sınıflar bulmak istediğinizde yararlıdır.

Örneğin, her saniyede “Vertex” adında 2.000 sınıf nesne oluşturan bir uygulama gördüğünüzü düşünün. Bu,ayırma sayısını saniyede 2.000 artırır ve sınıfa göre sıralama yaparken bunu görürsünüz. Bu tür atıklar oluşturmamak için bu tür nesneler tekrar kullanılmalı mı? Cevap evetse muhtemelen bir bellek havuzu uygulanması gerekecektir.

Çağrı yığınına göre düzenle

Çağrı yığınına göre düzenleme, belleğin ayrıldığı yoğun bir yol (ör. bir döngünün içinde ya da çok miktarda ayırma işi yapan belirli bir işlev) olduğunda yararlıdır. Çağrı yığınına göre görüntülemek bu ayırma hotspot'larını görmenize olanak tanır.

Derin ve tutulan boyut karşılaştırması

Sığ boyut, yalnızca nesnenin kendi belleğini izler. Bu nedenle, en çok temel öğelerden oluşan basit sınıfları izlemek için yararlıdır.

Tutulan boyut, doğrudan nesne tarafından ayrılan toplam belleğin yanı sıra yalnızca nesne tarafından referans verilen diğer nesneleri de gösterir. Yalnızca temel alanların değil, diğer nesnelerin de ayrılmasını gerektiren karmaşık nesneler nedeniyle bellek basıncını izlemek için yararlıdır. Bu değeri elde etmek için bellek profil aracını kullanarak bir bellek dökümü oluşturun. Bu yığında ayrılan nesneler ekrana eklenir.

Tam bellek dökümü
Şekil 8. Bellek profil aracı araç çubuğundaki Döküm Java yığın düğmesini tıklayarak istediğiniz zaman bir bellek dökümü oluşturabilirsiniz.

sütun olarak eklendi
Şekil 9. Bellek dökümü oluşturulduğunda, bu yığındaki nesne ayırmalarını gösteren bir sütun görüntülenir.

3. Optimizasyonun etkisini ölçme

Ölçülmesi kolay bir bellek optimizasyonu iyileştirmesi de çöp toplamadır. Optimizasyon, bellek baskısını azalttığında daha az çöp toplama (GC) görmeniz gerekir. Bunu ölçmek için profil oluşturucu zaman çizelgesindeki GC'ler arasındaki süreyi ölçün. Bellek optimizasyonlarından sonra GC'ler arasında daha uzun süreler görmeniz gerekir.

Aşağıdakiler gibi bellek iyileştirmelerinin nihai etkisi:

  • Uygulama sürekli bellek baskısına sahip değilse Yetersiz Bellek sorunları nedeniyle daha az kapatılır.
  • Daha az GC'ye sahip olmak, olumsuzluk metriklerini iyileştirir. Bunun nedeni, GC'lerin CPU anlaşmazlığına yol açması ve bu nedenle, GC gerçekleşirken oluşturma görevlerinin ertelenmesine yol açabilmesidir.