Bellek kullanımı (anonim RSS + takas)

Bellek kullanımı (anonim RSS + takas), Android vitals'daki bir metriktir ve uygulamanızın bellek kullanımını yansıtır.

Anonim bellek, depolama alanındaki bir dosya tarafından desteklenmeyen bellektir. Örneğin, yığın ayırmaları ve mmap ile ayrılan bellek. Bu, Java veya Kotlin yığını, yönetilmeyen yerel yığın ayırmaları (Bitmap piksel verilerinin Android 8.0 (API düzeyi 26) ve sonraki sürümlerde bulunduğu yerler) ve iş parçacığı yürütme yığınları dahil olmak üzere uygulamanızın dinamik bellek ayırmalarını yakalar. İşletim sistemi, baskı altında dosya destekli belleği bırakabilir ancak anonim belleği bırakamaz.

Kalıcı küme boyutu (RSS), bir işlem tarafından kullanılan ve fiziksel RAM'de tutulan toplam bellek sayfası sayısıdır (hem paylaşılan hem de paylaşılmayan). Bir sayfaya birden fazla işlem (ör. aynı kitaplığa erişen uygulamalar) tarafından erişiliyorsa bu sayfa "paylaşılan" olarak kabul edilir.

Anonim bellek için sistem, bellek baskı altındayken sayfaları takas alanına (veya Android'de zRAM) yazabilir. Gerekirse sistem bu sayfaları takastan geri okuyabilir.

Toplam bellek kullanımı (anonim RSS + takas), uygulamanızın depolama alanında bir dosya tarafından desteklenmeyen toplam bellek sayfası sayısının bir ölçüsüdür. Takasta sistem tarafından da korunmakta olan tüm bellekleri içerir. Anonim RSS + takas izleme, uygulamanızın gerçek ve boşaltılamayan bellekte kaplanan yerini görmenizi sağlar.

Uygulamanızın bellek kullanımı yüksekse bu sayfadaki yönergeleri kullanarak sorunu daha ayrıntılı bir şekilde inceleyin ve düzeltin.

Yüksek bellek kullanımını belirleme

Android vitals

Android vitals, uygulamanızın bellek kullanımını aşağıdaki işlem durumlarına göre ayrıntılı olarak paylaşır:

  • Ön plan: Uygulamanın işlemi görünür durumdadır. Buradaki yüksek P99 değeri genellikle kullanıcı tarafından algılanan performansı (jank veya OOM kilitlenmeleri) etkiler ve büyük ölçüde boşaltılmamış kullanıcı arayüzü bileşenlerinden veya etkinliklerinden kaynaklanır.
  • Ön plan hizmeti: Uygulama bir ön plan hizmeti çalıştırıyor. Bu hizmetler uzun süren görevler için tasarlandığından, zaman içinde P99 kuyruğunu agresif bir şekilde şişiren kümülatif yaşam döngüsü sızıntıları için uygun adaylardır.
  • Arka plan: Uygulama bir arka plan hizmeti çalıştırıyor veya kısa süre önce arka plana alındı ancak henüz önbelleğe alınmadı. Arka planda işleme bu noktada sorunlara yol açar.
  • Önbelleğe alınmış: Uygulama, önbelleğe alınmış durumdadır. Bu durum, LMK'ler gibi sistem belleği baskısına karşı oldukça hassastır. İşletim sistemi bu işlem durumunu istediği zaman kaldırabileceğinden bu durum yalnızca hata ayıklama amacıyla sağlanır.

Bu işlem durumlarının onTrimMemory geri çağırmalarla nasıl ilişkili olduğunu anlamak için etkinliklere yanıt olarak belleği serbest bırakma ile ilgili kılavuza bakın.

Android vitals, uygulamanızın bellek kullanımını RAM gruplarına göre de ayırır. Bellek kullanımı metriği, günlük yüzdelik dilim değerlerinin zaman çizelgesi olarak gösterilir. Ayrıca, 50. ve 90. yüzdelik dilimlerin en son günlük değeri de gösterilir.

Bellek temel çizginizi belirledikten sonra, aşırı bellek kullanımını teşhis etmek ve iyileştirmek için yönergeleri uygulayın.

Kuyruk çarpıklığını kullanarak bellek sızıntılarını belirleme

Bellek sızıntılarını belirlemek için Android vitals'da tipik (P50) ve son kullanıcılarınız (P90) arasındaki farklılığa bakın. Genel varlık şişmesi, tüm yüzdelik dilimlerde belleği eşit şekilde şişirirken bellek sızıntıları zamanla artarak son uçtaki verileri büyük ölçüde çarpıtır.

P90 ve P99 metriklerinizi, P50 temel değerinizle işlem adına göre karşılaştırmanız gerekir. P90 ile P50 oranınız 3, 5 katı aşarsa uzun oturumlar sırasında bellek sızıntısı yaşanma olasılığı yüksektir. Belirli kullanım alanlarında, yüksek bir oran her zaman sızıntı olduğunu göstermez. Ancak yüksek bellek kullanımının beklenen bir davranış olup olmadığını belirlemek için belirli iş akışını değerlendirmeniz gerekir.

Kaynaklar

Aşırı bellek kullanımını yerel olarak teşhis etme

Aşırı bellek kullanımının kaynağını teşhis etmeye başlamak için geliştirici ayarlarında, Android Studio'da veya Perfetto'da Yığın dökümü kaydet'i kullanarak yığın dökümü yakalayabilirsiniz. Uygulamanızın temel kullanıcı yolculuklarını test ettikten sonra yerel olarak yığın dökümü alarak başlamanızı öneririz.

Özellikle aşağıdaki kullanıcı yolculuklarını test etmenizi öneririz:

  • Web görünümleri ve uygulama içi tarayıcı oturumları
  • Medya ağırlıklı sonsuz kaydırma
  • Öğe oluşturma ve düzenleme akışları

Olası bellek sızıntılarını araştırmak için öncelikle Android vitals bellek kullanımı kontrol panelindeki İşlem adı tablosunu kullanarak en fazla bellek tüketen işlemleri belirleyin. Ardından, uygulamanın arka plana alındıktan sonra belleği serbest bırakıp bırakmadığını doğrulamak için ilgili kullanıcı yolculuklarını yerel olarak çalıştırın ve farklı işlem durumlarında (görünür, ön plan hizmeti ve önbelleğe alınmış) yığın dökümleri toplayın.

Android Studio Profiler'ı kullanarak bellek sorunlarında hata ayıklıyorsanız bellek sızıntısı algılamayı kolaylaştırmak için LeakCanary entegrasyonunu ve görüntü kullanımınızı optimize etmek için yinelenen bit eşlem algılamayı da kullanabilirsiniz.

Yığın dökümünü topladıktan sonra, yığın dökümünü analiz etmek ve yüksek bellek kullanımının olası kaynaklarını belirlemek için Perfetto AI Skills'i kullanmanızı öneririz.

Yapay zeka becerilerinin verebileceği yanıtlarla ilgili bir örneği aşağıda bulabilirsiniz:

I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
  Summary of Findings
  The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
   1. [Library] Image Cache Optimization:
       * Review the [Library] caching strategy. Ensure that bitmaps
         loaded for animations are released or downsampled when the animation is
         not in the foreground.
   2. Asset Resolution Audit:
       * The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
   3. View Lifecycle Management:
       * Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
      tab are properly detached or their animations are cleared when switching between tabs.
   4. Fix Surface Leaks:
       * Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
         native resource exhaustion.

Heap dökümlerini yorumlama ile ilgili ek kaynaklar

Yığın dökümlerini yorumlama ve bellek kullanımında hata ayıklama hakkında daha fazla bilgi için aşağıdaki kaynaklara göz atabilirsiniz:

  • Manuel analiz: Perfetto kullanıcı arayüzünde yığın dökümü görselleştirmelerinde nasıl gezineceğinizi ve bunları nasıl yorumlayacağınızı öğrenmek için Perfetto Heap Dump Explorer kılavuzunu kullanın.
  • Java/Kotlin ayırmaları: Android Çalışma Zamanı (ART) yığın dökümlerini analiz etme konusunda adım adım yol gösteren bilgiler için İlk ART yığın dökümünüzü görselleştirme başlıklı makaleyi inceleyin.
  • Yerel ayırmalar: Yerel (C/C++) bellek profillerini nasıl toplayacağınızı ve analiz edeceğinizi öğrenmek için Perfetto Native Profiling belgelerine bakın.
  • CLI incelemesi: Uygulamanızın bir cihazdaki bellek kullanımının hızlı bir dökümünü almak için adb dumpsys meminfo komutunu kullanın.
  • Yapay zeka destekli analiz: İzlerinizdeki bellek sızıntılarını ve aşırı tahsisleri tespit etmenize yardımcı olmak için Perfetto Yapay Zeka Becerileri'nden yararlanarak LLM destekli analizler yapın.
  • SQL tabanlı analiz: Yapılandırılmış sorgular ve özel komut dosyaları çalıştırarak karmaşık iz verilerini analiz etmek için Perfetto SQL ve İz Analizi Becerileri'ni kullanın.

Bellek kullanımını iyileştirme

Uygulamanızın bellek kullanımını iyileştirme hakkında daha fazla bilgi edinmek için aşağıdaki bölümlere bakın:

Bellek sorunlarını düzeltme hakkında ayrıntılı bilgi için Uygulamanızın belleğini yönetme rehberine bakın.