Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Linux:Sayfa Önbelleği Sınırı özelliği

Son Güncelleme:Oct 08, 2026

Apache Spark gibi iş yükleri kısa sürede büyük miktarda sayfa önbelleği biriktirebilir. Bu sayfaların çoğu kirli sayfalardır ve yavaş geri kazanılır. Geri kazanma işlemi belleği yeterince hızlı serbest bırakamazsa çekirdek bellek tükenmesiyle karşılaşır ve beklenmeyen bir bellek yetersizliği (OOM) hatası tetiklenerek iş süreçlerinde dalgalanmalara neden olur. Sayfa Önbelleği Sınırı, bellek kontrol grubu (memcg) başına sayfa önbelleği kullanımını sınırlar ve sınır aşıldığında fazla önbelleği geri kazandırarak hem sınırsız önbellek büyümesini hem de beklenmeyen OOM hatalarını önler. Alibaba Cloud Linux 3'te kernel sürümü 5.10.134-14 ve üzeri sürümlerden itibaren kullanılabilir.

Arayüzler

Aşağıdaki tabloda tüm arayüzler özetlenmiştir. Detaylı açıklamalar aşağıda yer almaktadır.

Arayüz Açıklama Varsayılan
/sys/kernel/mm/pagecache_limit/enabled Genel açma/kapama anahtarı 0
/sys/fs/cgroup/memory/<memcg>/memory.pagecache_limit.enable Memcg başına açma/kapama anahtarı 0
/sys/fs/cgroup/memory/<memcg>/memory.pagecache_limit.size Bayt cinsinden sayfa önbelleği sınırı 0
/sys/fs/cgroup/memory/<memcg>/memory.pagecache_limit.sync Geri kazanma modu: asenkron (0) veya senkron (1) 0

/sys/kernel/mm/pagecache_limit/enabled

Sayfa Önbelleği Sınırı için genel anahtarı kontrol eder. Geçerli değerler: 0 ve 1.

  • 1: Sayfa Önbelleği Sınırı'nı genel olarak etkinleştirir.

  • 0: Sayfa Önbelleği Sınırı'nı genel olarak devre dışı bırakır.

/sys/fs/cgroup/memory/<memcg>/memory.pagecache_limit.enable

Memcg başına anahtarı kontrol eder. Geçerli değerler: 0 ve 1.

  • 1: İlgili memcg için Sayfa Önbelleği Sınırı'nı etkinleştirir.

  • 0: İlgili memcg için Sayfa Önbelleği Sınırı'nı devre dışı bırakır.

/sys/fs/cgroup/memory/<memcg>/memory.pagecache_limit.size

Bir memcg için maksimum sayfa önbelleği kullanımını bayt cinsinden ayarlar. Geçerli aralık: 0 ile memcg'nin memory.limit_in_bytes değeri arasındadır.

  • 0: Genel anahtar veya memcg başına anahtar ne olursa olsun ilgili memcg için Sayfa Önbelleği Sınırı'nı devre dışı bırakır.

  • Sıfır dışı değer: Memcg'nin sayfa önbelleği kullanımını bu değerle sınırlar.

Not: Bir memcg'nin sayfa önbelleği kullanımı, altındaki tüm çocuk memcg'lerin sayfa önbelleği kullanımlarının toplamıdır.

/sys/fs/cgroup/memory/<memcg>/memory.pagecache_limit.sync

Geri kazanma modunu kontrol eder. Geçerli değerler: 0 ve 1.

  • 0: Asenkron geri kazanma. Çekirdek geri kazanma görevlerini arka plan iş kuyruğu iş parçacıklarına devrederek ana iş parçacıkları üzerindeki etkiyi azaltır. İş yükü sayfa önbelleğini iş kuyruğunun geri kazandırabileceğinden daha hızlı oluşturursa sayfa önbelleği geçici olarak sınırı aşabilir.

  • 1: Senkron geri kazanma. Geri kazanma mevcut sürecin bağlamında çalışır ve yeterli sayfa önbelleği serbest bırakılana kadar süreci engeller. Bu yöntem daha güçlü garantiler sunar ancak süreç düzeyinde gecikme süresi artışlarına neden olabilir.

Nasıl çalışır

Sayfa Önbelleği Sınırı'nı etkinleştirdikten sonra çekirdek, bir memcg sürecine her sayfa önbelleği tahsis edildiğinde aşağıdaki mantığı uygular:

  1. Geçerli memcg'yi denetleyin. Çekirdek, memcg'nin sayfa önbelleği sınırını aşıp aşmadığını belirler. Ardından memcg hiyerarşisi boyunca yukarı doğru ilerleyerek her üst memcg'nin memory.pagecache_limit değerlerini kontrol eder. Bir üst memcg'nin değeri 0 ise özellik bu üst memcg ve onun tüm alt öğeleri için devre dışı bırakılır; bu durumda sayfa önbelleği sınırsızdır.

  2. Geri kazanma modunu seçin. Memcg sınırı aşmışsa çekirdek, asenkron ve senkron geri kazanma arasında karar vermek için memory.pagecache_limit.sync değerini kontrol eder.

  3. Sayfa önbelleğini geri kazanın. Geri kazanma davranışı moda göre farklılık gösterir:

    Mod Geri kazanma hedefleri
    Senkron Varsayılan olarak yalnızca eşlenmemiş dosya sayfaları. Dört taramadan sonra eşlenmiş dosya sayfaları da uygun hale gelir.
    Asenkron Varsayılan olarak hem eşlenmemiş hem de eşlenmiş dosya sayfaları. İki taramadan sonra kirli sayfalar da uygun hale gelir.

Aşağıdaki diyagram uçtan uca akışı göstermektedir:

image

Bellek sayfa türleri

Tür Açıklama
Eşlenmemiş dosya sayfaları Herhangi bir dosyaya eşlenmemiş sayfalar. Genellikle diskte kalıcı olmayan özel ve geçici verileri tutar.
Eşlenmiş dosya sayfaları Dosyalara eşlenmiş sayfalar. Süreçlerin dosya verilerini doğrudan bellekte okumasına ve yazmasına olanak tanır.
Kirli sayfalar Değiştirilmiş ancak henüz diske yazılmamış eşlenmiş dosya sayfaları. Önce temizlenmeleri gerektiğinden yavaş geri kazanılırlar.

Sayfa Önbelleği Sınırı'nı yapılandırma

Bu örnekte 20 MiB'lik bir sayfa önbelleği oluşturulur, 10 MiB'lik bir sınır uygulanır ve özelliğin fazlalığı geri kazandırdığı doğrulanır.

Ön koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

  • Alibaba Cloud Linux 3 işletim sistemi ve 5.10.134-14 veya üzeri kernel sürümü çalıştıran bir Elastic Compute Service (ECS) örneği

  • Örnek üzerinde sudo erişimi

Özelliği etkinleştirme ve yapılandırma

  1. ECS örneğine bağlanın. Talimatlar için bkz. Linux örneğinde oturum açmak için Workbench'i kullanma.

  2. Sayfa Önbelleği Sınırı'nı genel olarak etkinleştirin.

    sudo sh -c 'echo 1 > /sys/kernel/mm/pagecache_limit/enabled'
  3. Bir memcg dizini oluşturun. Bu örnekte /sys/fs/cgroup/memory/test/ kullanılmaktadır.

    sudo mkdir -p /sys/fs/cgroup/memory/test/
  4. Sayfa önbelleği sınırını 10 MiB (10.485.760 bayt) olarak ayarlayın.

    sudo sh -c 'echo 10485760 > /sys/fs/cgroup/memory/test/memory.pagecache_limit.size'
  5. Geri kazanma modunu yapılandırın. İş yükünüze bağlı olarak aşağıdaki seçeneklerden birini seçin:

    • Asenkron geri kazanma:

      sudo sh -c 'echo 0 > /sys/fs/cgroup/memory/test/memory.pagecache_limit.sync'
    • Senkron geri kazanma:

      sudo sh -c 'echo 1 > /sys/fs/cgroup/memory/test/memory.pagecache_limit.sync'
  6. Memcg için Sayfa Önbelleği Sınırı'nı etkinleştirin.

    sudo sh -c 'echo 1 > /sys/fs/cgroup/memory/test/memory.pagecache_limit.enable'

Test sayfa önbelleği oluşturma

  1. cgexec komutunu sağlayan libcgroup paketini yükleyin.

    sudo yum install libcgroup-tools
  2. 20 MiB'lik bir test dosyası oluşturun ve 20 MiB'lik sayfa önbelleği oluşturmak için test memcg altında okuyun.

    sudo dd if=/dev/zero of=./testfile bs=1M count=20 oflag=direct
    sudo cgexec -g "memory:test" cat ./testfile > /dev/null

Sonuçları doğrulama

  1. Sayfa önbelleği kullanımını kontrol edin. memory.stat içindeki cache alanı, memcg tarafından tüketilen toplam sayfa önbelleğini gösterir.

    grep cache /sys/fs/cgroup/memory/test/memory.stat

    Çıktıda cache değerinin yaklaşık 10.543.104 bayt (~10 MiB) olduğu görülür; bu da sayfa önbelleği kullanımının yapılandırılan sınırla kısıtlandığını doğrular.

    image.png

  2. Ne kadar sayfa önbelleğinin geri kazanıldığını kontrol edin. memory.exstat içindeki pagecache_limit_reclaimed_kb alanı, özellik tarafından geri kazanılan kümülatif kilobayt cinsinden sayfa önbelleğini gösterir.

    cat /sys/fs/cgroup/memory/test/memory.exstat

    Çıktıda pagecache_limit_reclaimed_kb değerinin yaklaşık 10.108 KB (~10 MiB) olduğu görülür; bu da 10 MiB'lik fazla sayfa önbelleğinin geri kazanıldığını doğrular.

    image.png

    Sonuç: 20 MiB'lik bir sayfa önbelleği oluşturuldu. Sayfa Önbelleği Sınırı kullanımı 10 MiB ile sınırladı ve beklenen şekilde kalan 10 MiB'i geri kazandırdı.

Not: Eğer pagecache_limit_reclaimed_kb beklenenden yüksekse bunun nedeni aşırı sıralı okuma ön getirmesi (read-ahead) olabilir. Disk aygıtı için okuma ön getirme boyutunu azaltın ve ardından yeniden test edin:
echo 128 | sudo tee /sys/block/<disk-device>/queue/read_ahead_kb
<disk-device> yerine disk aygıtı adınızı yazın (örneğin, vda ). read_ahead_kb parametresi çekirdeğin sıralı okumalar sırasında önceden kaç kilobayt veri getirdiğini kontrol eder. Bu değeri düşürmek gereksiz sayfa önbelleği tahsisini azaltır.

Sonraki adımlar