Bellek sınırlayıcı

Android 17 ve sonraki sürümlerde, Linux cgroup v2'yi kullanarak uygulama işlemlerinin bellek kullanımını izleyen ve sınırlayan bir sistem hizmeti olan Bellek Sınırlayıcı bulunur. Bellek Sınırlayıcı, uygulamaların tek tek aşırı sistem belleği tüketmesini önler. Bu sayede genel bellek baskısı azalır ve kritik ön plan ve önbelleğe alınmış işlemlerin agresif bir şekilde düşük bellek nedeniyle sonlandırılması önlenir.

Sistem

Bellek Sınırlayıcı, işlem yaşam döngüsü etkinliklerini ve durum değişikliklerini izlemek için Etkinlik Yöneticisi Hizmeti (AMS) ile entegre olur. Bellek Sınırlayıcı, Linux çekirdeği cgroup v2 hiyerarşisini kullanarak bellek sınırlarını zorunlu kılar.

Bellek Sınırlayıcı'yı desteklemek için cihaz çekirdeğinin cgroup v2'yi ve memory denetleyicisini etkinleştirmesi gerekir. Hizmet özellikle aşağıdaki özelliklere dayanır:

memory.high
Paket UID cgroup'una veya işlem başına bellek bütçesi etkin olduğunda işlem PID cgroup'una uygulanan yumuşak geri alma eşiği. Bellek bütçesiyle kısıtlanmadığı sürece varsayılan olarak platform bellek sınırının %90'ı kullanılır. Bu sınır aşıldığında çekirdek, tahsisleri kısıtlar ve ilgili cgroup'tan sayfaları geri alır.
memory.max
Paket UID cgroup'una, platform bellek sınırının %100'ünde katı bir bellek tavanı uygulanır. Geri alma işlemi, bellek kullanımını memory.max değerinin altında tutamazsa çekirdek, yetersiz bellek işlemini sonlandırır.
memory.swap.max
Her işlem PID cgroup'unun kullanabileceği maksimum takas alanını (ör. ZRAM) sınırlar.

Cgroup ve çekirdek gereksinimleri

Android 17 (API düzeyi 37) ve sonraki sürümleri çalıştıran cihazlar, platform sınırları, manifest bütçeleri ve API düzeyi 37.2 ve sonraki sürümlerde MemoryBudgetManager için aşağıdaki cgroup v2 ve çekirdek şartlarını karşılamalıdır:

  • İşlem başına cgroup etkinleştirme: /system/etc/cgroups.json içinde cgroup v2 memory denetleyicisinde "NeedsActivation": true ayarını açık tutun. Böylece erken init, /sys/fs/cgroup/apps/uid_<UID>/pid_<PID> ve /sys/fs/cgroup/system/uid_<UID>/pid_<PID> oluşturmadan önce +memory etkinleştirilir. "NeedsActivation"'yi devre dışı bırakmayın, ro.config.per_app_memcg=false'yi ayarlamayın veya UID ya da işlem başına bellek cgroup'larını devre dışı bırakan tedarikçi firma geçersiz kılmaları cgroups.json eklemeyin. /vendor/etc/task_profiles.json, MemLimit veya MemSoftLimit gibi bellek denetleyici özelliklerini geçersiz kılıyorsa "File" değerini boş bırakmayın ve cgroup v2 dosya adlarıyla "FileV2" eşlemelerini ekleyin.

  • Cgroup dosya izinleri: /sys/fs/cgroup/apps ve /sys/fs/cgroup/system altındaki üst uid_<UID> ve işlem başına pid_<PID> kontrol dosyaları memory.high, memory.max ve memory.swap.max, UID veya GID 1000 altında system_server tarafından yazılabilir olmalıdır. Böylece UID sınırları, işlem bütçeleri ve takas sınırları EACCES hataları olmadan uygulanır. UID başına ve işlem başına memory.current, memory.events, memory.events.local, memory.stat ve memory.high dosyaları ile UID başına memory.max ve memory.swap.max dosyaları, sahip olan uygulama UID'si tarafından okunabilir olmalıdır. Böylece MemoryBudgetManager sorguları ve bütçe aşımı dinleyicileri işlem içinde çalışır.

  • Yerel PSI izolasyonu: GKI yerel memcg PSI değişikliğini dahil ederek ve record_psi=false değerini herhangi bir android_vh_mem_cgroup_handle_over_high tedarikçi kancasında tutarak cgroup başına memory.high geri alma duraklamalarını global bellek baskısı duraklama bilgilerinden (PSI) izole edin. PSI izolasyonu olmadan, yerelleştirilmiş memory.high kısıtlama, global bellek PSI'sini artırır ve sistem genelinde bellek baskı altında olmadığında gereksiz lmkd işlem sonlandırmalarını tetikleyebilir.

Uygulamalara etkisi

Bellek sınırları içinde çalışan uygulamalar, Bellek Sınırlayıcı'dan etkilenmez.

Bir uygulama memory.high sınırını aştığında çekirdek, uygulamanın temiz dosya destekli belleğini çıkarır ve etkin olmayan anonim belleğini değiştirerek uygulamayı sınır içinde tutar. Bu sayfa çıkarma ve takas etkinliği sonucunda uygulama geçici olarak yürütme kısıtlaması yaşayabilir ancak çalışmaya devam eder.

Uygulamanın memory.max değerini aşarak veya takas alanı tükendikten sonra bellek ayırmaya devam ettiği kontrolsüz bellek sızıntısı gibi aşırı durumlarda uygulama bellek ayıramaz ve sonlandırılır.

Süreç izleme

Bellek Sınırlayıcı, bu sayfadaki platform sınırlarını uygulama işlemlerine (UID >= 10000) uygular. UID'si 10000'in altında olan işlemler ve varsayılan cihaz üzerinde korumalı alana alınmış çıkarım hizmetinin paketi (config_defaultOnDeviceSandboxedInferenceService) platform sınırlarına tabi değildir. Sistem uygulamaları ve hizmetleri, Sistem bellek bütçeleri bölümünde açıklandığı gibi daha sıkı bellek bütçeleri tanımlayabilir.

Bellek Sınırlayıcı, bellek sınırlarını işlemin görünürlük durumuna göre atar:

  • Görünür işlemler: Odaklanılan etkinlik veya etkin etkileşim gibi kullanıcı tarafından görülebilen bir kullanıcı arayüzü barındıran işlemler. Kullanıcı arayüzü görüntülemek, oluşturma ve grafik ardışık düzenleri için daha büyük bir çalışma kümesi gerektirdiğinden görünür işlemler daha yüksek bir bellek sınırına sahiptir.

  • Görünür olmayan işlemler: Arka plan hizmetleri veya yayın alıcıları gibi kullanıcı arayüzü sunmadan arka planda çalışan işlemler. Kullanıcı arayüzü bileşenlerini oluşturmadıkları için daha kısıtlayıcı bir sınır altında çalışırlar.

Aşağıdaki tabloda, belirli işlem durumları platform bellek sınırı sınıflandırmalarıyla eşlenmektedir:

İşlem durumuBellek sınırı
PERSISTENT Kısıtlanmamış
PERSISTENT_UI Kısıtlanmamış
TOP visible
BOUND_TOP visible
FOREGROUND_SERVICE not-visible
BOUND_FOREGROUND_SERVICE not-visible
IMPORTANT_FOREGROUND visible
IMPORTANT_BACKGROUND not-visible
TRANSIENT_BACKGROUND not-visible
BACKUP not-visible
SERVICE not-visible
RECEIVER not-visible
TOP_SLEEPING visible
HEAVY_WEIGHT not-visible
HOME not-visible
LAST_ACTIVITY not-visible
CACHED_ACTIVITY not-visible
CACHED_ACTIVITY_CLIENT not-visible
CACHED_RECENT not-visible
CACHED_EMPTY not-visible

PERSISTENT ve PERSISTENT_UI işlemlerine platform sınırı uygulanmaz. Bu işlemlerden biri bellek bütçesi beyan ederse Bellek bütçesi grupları bölümünde açıklandığı gibi ön plan bütçesi geçerli olur.

Önbelleğe alınmış durumda, işlemler not-visible platform sınırını korur. Ayrıca önbelleğe alınmış uygulama dondurma ve sıkıştırma işlemleri de yapılır. Böylece, dondurma veya maksimum geri alma işlemi gerçekleşmese bile işlemler sınırlı kalır.

Bir işlem, kendisine atanan memory.high sınırını aştığında Memory Limiter, etkinliği algılar ve bellek profili yakalama veya statsd'e anormallik kaydetme gibi teşhis işlemlerini tetikleyebilir.

Bellek bütçesi paketleri

API düzeyi 37.2 ve sonraki sürümlerde uygulamalar ve sistem hizmetleri, platform sınırlarından daha sıkı bellek bütçeleri tanımlayabilir veya MemoryBudgetManager aracılığıyla daha sıkı çalışma zamanı bütçeleri belirleyebilir. Uygulamalar, bütçeleri Uygulama bellek bütçelerini ayarlama bölümünde açıklandığı şekilde yapılandırır. Sistem uygulamaları ve hizmetleri için Sistem belleği bütçeleri bölümüne bakın. Bütçe, memory.high değerini belirler ve aynı işlem durumu için platform sınırını aşamaz. Çalışma zamanı bütçesi, geçerli manifest bütçesini aşamaz.

Bir işlem, manifest bütçesi beyan ettiğinde bellek sınırlayıcı, işlem durumunu üç bütçe grubundan birine eşler. Çalışma zamanı bütçesi ise güncellenene veya temizlenene kadar tek bir üst sınır uygular. Manifest dosyasındaki android:state değerleri (foreground, perceptible ve background), eşleşen paket için bütçeyi belirtir. CACHED_ACTIVITY ile CACHED_EMPTY arasındaki durumlarda önbelleğe alınan işlemler, önbelleğe alınan uygulama dondurma ve sıkıştırmanın yanı sıra background bütçesini korur.

İşlem durumuBütçe grubu
PERSISTENTÖn plan
PERSISTENT_UIÖn plan
TOPÖn plan
BOUND_TOPÖn plan
TOP_SLEEPINGÖn plan
FOREGROUND_SERVICEAlgılanabilir
BOUND_FOREGROUND_SERVICEAlgılanabilir
IMPORTANT_FOREGROUNDAlgılanabilir
IMPORTANT_BACKGROUNDAlgılanabilir
TRANSIENT_BACKGROUNDArka plan
BACKUPArka plan
SERVICEArka plan
RECEIVERArka plan
HEAVY_WEIGHTArka plan
HOMEArka plan
LAST_ACTIVITYArka plan
CACHED_ACTIVITYArka plan
CACHED_ACTIVITY_CLIENTArka plan
CACHED_RECENTArka plan
CACHED_EMPTYArka plan

Cihaz uygulama gereksinimleri

Bütçeler uygulamaya aittir. Bir uygulama, kendi çalışma zamanı bütçelerini MemoryBudgetManager aracılığıyla ayarlayabilir, değiştirebilir veya temizleyebilir (ör. kendi uzak yapılandırmasına yanıt olarak) ve manifest bütçelerini yalnızca uygulama güncellemesi aracılığıyla değiştirir. system_server, tedarikçi hizmetleri ve OEM çerçevesinden veya tamamlayıcı uygulamadan gelen sinyallerde yapılan değişiklikler de dahil olmak üzere cihaz uygulamaları, uygulama adına uygulamanın manifestini veya çalışma zamanı bütçesini ayarlamamalı, yükseltmemeli, temizlememeli ya da yok saymamalıdır. Bu durum, OEM'lerin, Sistem belleği bütçeleri bölümünde açıklandığı gibi, oluşturdukları sistem uygulamalarının manifestlerinde bütçeleri beyan etmelerini veya yeniden kalibre etmelerini kısıtlamaz.

Android Uyumluluk Tanımlama Belgesi'nin 8.6 bölümü, uygulama bellek sınırlarını atlayan yöntemleri, izin verilenler listelerini veya politikaları yasaklar. Üretim derlemeleri; platform bellek sınırlarını veya uygulama bellek bütçelerini devre dışı bırakan izin verilenler listeleri, uygulama başına geçersiz kılmalar ya da genel anahtarlar içermemelidir.

Yapılandırma

Android 17 ve sonraki sürümlerde Bellek Sınırlayıcı, /system/etc/memory-limiter-config.xml adresindeki sistem bölümünde bulunan standart platform yapılandırma dosyası kullanılarak yapılandırılır.

XML biçimi

Yapılandırma dosyası, memory-limiter-config.xsd içinde tanımlanan şemaya uyar. Dosya, kullanılabilir belleğe göre sıralanmış birden fazla sınır grubu tanımlar. Hizmet, cihazın kullanılabilir RAM'ine göre en yüksek eşleşen sınır grubunu seçer. Tüm bellek değerleri mebibayt (MiB) cinsinden belirtilir.

<MemoryLimiterConfig>
  <version>1</version>
  <configList>
    <!-- RAM boundaries account for MemTotal excluding carve-outs. -->
    <limitSet>
      <!-- Limits for 16GB RAM device [14336, 18432): 10G/5G/5G/5G -->
      <minimumRequiredMemTotal>14336</minimumRequiredMemTotal>
      <maximumAllowedMemTotal>18432</maximumAllowedMemTotal>
      <memVisible>10240</memVisible>
      <memNotVisible>5120</memNotVisible>
      <swapVisible>5120</swapVisible>
      <swapNotVisible>5120</swapNotVisible>
    </limitSet>
    <limitSet>
      <!-- Limits for 12GB RAM device [9216, 14336): 8G/4G/4G/4G -->
      <minimumRequiredMemTotal>9216</minimumRequiredMemTotal>
      <maximumAllowedMemTotal>14336</maximumAllowedMemTotal>
      <memVisible>8192</memVisible>
      <memNotVisible>4096</memNotVisible>
      <swapVisible>4096</swapVisible>
      <swapNotVisible>4096</swapNotVisible>
    </limitSet>
    <limitSet>
      <!-- Limits for 8GB RAM device [6800, 9216): 5G/3G/3G/3G -->
      <minimumRequiredMemTotal>6800</minimumRequiredMemTotal>
      <maximumAllowedMemTotal>9216</maximumAllowedMemTotal>
      <memVisible>5120</memVisible>
      <memNotVisible>3072</memNotVisible>
      <swapVisible>3072</swapVisible>
      <swapNotVisible>3072</swapNotVisible>
    </limitSet>
    <limitSet>
      <!-- Limits for 6GB RAM device [4800, 6800): 4G/2G/2G/2G -->
      <minimumRequiredMemTotal>4800</minimumRequiredMemTotal>
      <maximumAllowedMemTotal>6800</maximumAllowedMemTotal>
      <memVisible>4096</memVisible>
      <memNotVisible>2048</memNotVisible>
      <swapVisible>2048</swapVisible>
      <swapNotVisible>2048</swapNotVisible>
    </limitSet>
    <limitSet>
      <!-- Limits for 4GB RAM device [3200, 4800): 2G/1G/1G/1G -->
      <minimumRequiredMemTotal>3200</minimumRequiredMemTotal>
      <maximumAllowedMemTotal>4800</maximumAllowedMemTotal>
      <memVisible>2048</memVisible>
      <memNotVisible>1024</memNotVisible>
      <swapVisible>1024</swapVisible>
      <swapNotVisible>1024</swapNotVisible>
    </limitSet>
  </configList>
</MemoryLimiterConfig>
version
Yapılandırma sürümünü tanımlayan pozitif bir tam sayı. Bu değer 1 olmalıdır.
minimumRequiredMemTotal

Bu sınır grubunun uygulanması için gereken minimum sistem MemTotal (MiB cinsinden, alt sınır dahil). Hizmet, bu değeri /proc/meminfo içinde çekirdek tarafından bildirilen toplam kullanılabilir belleğe göre değerlendirir.

Bellek ayırmalarını ve sınırlarını anlama: Çekirdek MemTotal değeri, donanım ve donanım yazılımı bellek ayırmaları düşüldükten sonra işletim sisteminin erişebileceği fiziksel DRAM'i yansıtır. Ayrılmış alanlar; GPU, temel bant modem, kamera ISP'si, güvenli yürütme ortamları ve hipervizörler gibi özel donanım bileşenleri için RAM ayırır. Bu bileşenler genellikle 500 MiB ile 2 GiB'ın üzerinde fiziksel bellek tüketir.

MemTotal, cihazın reklamı yapılan fiziksel DRAM'inden daha düşük olduğundan minimumRequiredMemTotal eşikleri bu ayırmalar için bir pay içerir. Örneğin, 16 GB'lık cihazları hedefleyen bir yapılandırma, 16384 (16 GiB) yerine 14336 (14 GiB) alt sınırını belirtir. 12 GB'lık cihazlar için bir katman ise 9216 (9 GiB) alt sınırını belirtir. Bu sayede, her cihazın, anakart düzeyindeki istisna varyasyonlarından bağımsız olarak amaçlanan katmanıyla eşleşmesi sağlanır.

maximumAllowedMemTotal

Bu sınır grubunun geçerli olması için sistemin maksimum MemTotal değeri (MiB cinsinden, tavan hariç). MemTotal bu üst sınırdan büyük veya bu sınıra eşitse belirlenen sınır geçerli olmaz. MemTotal 3.200 MiB'den az veya en az 18.432 MiB belleğe sahip cihazlarda, işlem başına bellek cgroup'ları etkin kalsa da (API düzeyi 37.2 ve sonraki sürümlerde manifest, sistem ve MemoryBudgetManager çalışma zamanı bütçeleriyle birlikte) Bellek Sınırlayıcı varsayılan platform sınırlarını uygulamaz.

memVisible

Paketin görünür bir işlemi olduğunda paket UID cgroup'una uygulanan MiB cinsinden memory.max sabit bellek sınırı. Varsayılan memory.high esnek geri alma eşiği, bu değerin %90'ıdır ve en yakın MiB'ye yuvarlanır.

memNotVisible

Paketin görünür işlemi olmadığında paket UID cgroup'una uygulanan MiB cinsinden memory.max sabit bellek sınırı. Varsayılan memory.high yumuşak geri alma eşiği, bu değerin %90'ıdır ve en yakın MiB'ye yuvarlanır.

swapVisible

Görünür her işlem PID cgroup'una uygulanan MiB cinsinden memory.swap.max takas alanı sınırı.

swapNotVisible

Görünür olmayan her işlem PID cgroup'una uygulanan MiB cinsinden memory.swap.max takas alanı sınırı.

Standart platform sınırları

Android 17 ve sonraki sürümlerde platform, [floor, ceiling) aralıklarını kullanarak yaygın fiziksel RAM katmanlarında /system/etc/memory-limiter-config.xml cinsinden standart bellek ve takas sınırlarını belirtir:

Hedef fiziksel RAM MemTotal aralığı [alt sınır, üst sınır)
(minimumRequiredMemTotal,
maximumAllowedMemTotal)
Görünür bellek sınırı
(memVisible)
Görünür olmayan bellek sınırı
(memNotVisible)
Görünür takas sınırı
(swapVisible)
Görünür olmayan takas sınırı
(swapNotVisible)
16 GB [14336, 18432) MiB 10.240 MiB (10 GiB) 5.120 MiB (5 GiB) 5.120 MiB (5 GiB) 5.120 MiB (5 GiB)
12 GB [9216, 14336) MiB 8.192 MiB (8 GiB) 4.096 MiB (4 GiB) 4.096 MiB (4 GiB) 4.096 MiB (4 GiB)
8 GB [6800, 9216) MiB 5.120 MiB (5 GiB) 3.072 MiB (3 GiB) 3.072 MiB (3 GiB) 3.072 MiB (3 GiB)
6 GB [4800, 6800) MiB 4.096 MiB (4 GiB) 2.048 MiB (2 GiB) 2.048 MiB (2 GiB) 2.048 MiB (2 GiB)
4 GB [3200, 4800) MiB 2.048 MiB (2 GiB) 1.024 MiB (1 GiB) 1.024 MiB (1 GiB) 1.024 MiB (1 GiB)

Bellek sınırı ilkeleri

Bellek Sınırlayıcı yapılandırması, aşağıdaki platform ilkelerine göre tasarlanmıştır:

  • Ekosistem tutarlılığı ve uygulama uyumluluğu: Cihazlar genelinde tutarlı bellek sınırları, Android ekosisteminde öngörülebilir uygulama performansı sağlar. Uygulamalar, standart bellek beklentilerine göre geliştirilir ve test edilir. Platform sınırlarının aynı kalması, beklenmedik kısıtlamaları veya erken sonlandırmaları önler.

  • Orantılı kaynak tahsisi: Platform sınırları, fiziksel RAM kapasitesine göre kalibre edilir:

    • Görünür işlemler: Etkin kullanıcı arayüzü, oluşturma ve oluşturma iş yüklerini desteklemek için toplam fiziksel RAM'in yaklaşık 1/2 ila 2/3'ü ayrılır.
    • Görünür olmayan işlemler: Arka plan görevleri için toplam fiziksel RAM'in yaklaşık 1/4 ila 1/3'ü ayrılır.
  • Evrensel uygulanabilirlik: Sınırlar, önceden yüklenmiş sistem ve OEM uygulamaları da dahil olmak üzere cihazdaki tüm uygulama işlemlerine (UID >= 10000) eşit şekilde uygulanır. Bellek Sınırlayıcı, varsayılan cihaz üzerinde korumalı alana alınmış çıkarım hizmeti dışında tek tek uygulamaları muaf tutmaz. Böylece tüm uygulamalarda adil bellek yönetimi sağlanır. Kritik etkileşimli arka plan programlarında kendi kendine ayarlanan memory.min koruma tabanlarını ve ayrı sistem uygulamaları ile hizmetlerinde daha sıkı, iş yüküne göre kalibre edilmiş memory.high tavanlarını yapılandırmak için Sistem belleği bütçeleri başlıklı makaleyi inceleyin.

  • Öngörülebilir çalışma zamanı bütçeleri: API düzeyi 37.2 ve sonraki sürümlerde uygulamalar, bellek sınırlarını ve cgroup bellek kullanımını sorgulayabilir ve MemoryBudgetManager aracılığıyla daha sıkı çalışma zamanı bütçeleri belirleyebilir. Standart platform ve manifest sınırlarının tedarikçi firma tarafından geçersiz kılınmadan korunması, çalışma zamanı bütçe davranışının cihazlar arasında tutarlı olmasını sağlar.

  • Çekirdek geri kazanımı ve takas dinamikleri: Bir uygulama işlemi memory.high sınırına yaklaştığında Linux çekirdeği, bellek geri kazanımını özellikle bu işlem cgroup'una yönlendirir. Bu kapsamda, etkin olmayan dosya destekli sayfalar bırakılır ve soğuk anonim sayfalar ZRAM'e taşınır. Böylece, genel bellek baskısı oluşturmadan sistem akıcılığı korunur.

Kabuk komutları

am memory-limiter komutu, geliştiricilerin ve sistem entegratörlerinin geliştirme, test ve hata ayıklama için çalışma zamanında hizmetle etkileşim kurmasına olanak tanır:

am memory-limiter <SUB-COMMAND>

durum

status alt komutu, Bellek Sınırlayıcı'nın faaliyet durumunu, yapılandırılmış platform sınırlarını ve etkin izleme sayaçlarını bildirir:

adb shell am memory-limiter status

adb shell am memory-limiter status version komutu çalıştırıldığında, iki eşikli bellek sınırlayıcı etkinse 2, devre dışıysa 0 yazdırılır.

Aşağıda, 8 GB'lık bir cihazda örnek status çıkışı verilmiştir:

Memory limiter
  enabled           limits=true       killing=true      ignored=none
  visible:          memHigh=4608MB    memMax=5120MB     swapMax=3072MB
  not-visible:      memHigh=2765MB    memMax=3072MB     swapMax=3072MB
  active=64         uid-started=32    uid-current=28    uid-updated=4
  started=72        watched=72        watch-failed=0
  limiters=64       limiters-hwm=70   red-poll=0        red-limiter=0
  events=0          false-events=0    modify=84

Çıkıştaki önemli alanlar şunlardır:

limits ve killing
memory.high ve memory.max platform bellek sınırlarının, cihazın RAM katmanı için yapılandırılıp uygulanmadığını belirtir.
ignored
ignore alt komutu tarafından hariç tutulan UID, sınırlama genel olarak duraklatıldığında all veya none.
visible ve not-visible
memory.high için varsayılan UID memHigh sınırı, memory.max için UID memMax sınırı ve memory.swap.max için işlem başına swapMax sınırı, her görünürlük sınıflandırması için uygulanır.
active
system_server içindeki izlenen işlem ve UID sınırlayıcıların sayısı.
uid-started, uid-current ve uid-updated
Manifest bütçeleriyle güncellenen UID sınırlayıcılar için kümülatif başlatma sayısı, etkin sayısı ve kümülatif değiştirme sayısı.
watched ve watch-failed
Kayıtlı ve başarısız olan cgroup memory.events izlemelerinin kümülatif sayısı.
limiters ve limiters-hwm
Etkin yerel cgroup izleyicilerinin sayısı ve ulaştığı en yüksek değer.
events ve false-events
system_server ve memory.events bildirimlerine gönderilen, izlenen bir eşiği aşmayan, sınırın üzerindeki etkinliklerin sayısı.

yoksay

ignore alt komutu, belirli bir UID'yi veya tüm işlemleri geçici olarak bellek sınırlamasından hariç tutar. Bu, performans karşılaştırması, stres testi, otomatik uygulama bellek bütçesi kalibrasyonu veya bellek davranışını teşhis etmek için kullanışlıdır:

# Ignore a specific UID
adb shell am memory-limiter ignore 10087
# Ignore all processes (temporarily disables limiting)
adb shell am memory-limiter ignore all
# Resume normal limiting operation
adb shell am memory-limiter ignore none

manuel

manual alt komutu, hesaplanan memory.high, memory.max ve memory.swap.max sınırlarını, hedefin yapılandırılmış sınırlarına kadar özel bir tam sayı tavanıyla geçersiz kılar. Tek bir işlemi hedeflemek için -p ile veya olmadan bir PID iletin ya da bir paket UID'sindeki tüm işlemleri hedeflemek için -u <UID> iletin. Boyutu bayt cinsinden belirtin, MiB için MB veya GiB için GB ekleyin ya da geçersiz kılmayı temizlemek için none değerini iletin. Geriye dönük uyumluluk için, son eki olmayan 20'nin altındaki tam sayılar MiB olarak yorumlanır:

# Set a 1 GiB limit for PID 1234, with or without -p
adb shell am memory-limiter manual 1234 1073741824
adb shell am memory-limiter manual 1234 1024MB
adb shell am memory-limiter manual -p 1234 1GB
# Set a 1 GiB limit for all processes in UID 10087
adb shell am memory-limiter manual -u 10087 1GB
# Remove the manual override for PID 1234 or UID 10087
adb shell am memory-limiter manual 1234 none
adb shell am memory-limiter manual -u 10087 none

Manuel işlem geçersiz kılmaları yalnızca söz konusu işlem örneğinin kullanım ömrü boyunca geçerlidir. İşlem yeniden başlatılırsa durumuna göre standart sınırlara döner. Buna karşılık, manual -u <UID> geçersiz kılmaları, UID etkin kaldığı sürece, UID'deki tüm işlemlerden çıkılana veya geçersiz kılmayı none ile temizleyene kadar devam eder.

Manuel geçersiz kılma, fiziksel sistem sınırlarını aşamaz.