Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Linux:Prevent application performance jitter caused by cgroups

Son Güncelleme:Oct 08, 2026

Control groups (cgroups), Linux üzerinde sistem kaynaklarını tahsis eder, yönetir ve izler. Cgroup sayısı veya hiyerarşi derinliği aşırı arttığında çekirdek, cgroup yapılarını taramak için gereğinden fazla CPU zamanı harcar; bu durum uygulama performansını düşürür.

Belirtiler

Konteyner ortamlarında bu sorun şu şekilde ortaya çıkar:

  • Aralıklı gecikme süresi artışları -- Uygulamalar zaman zaman istek gecikme süresinde ani bir artış yaşar.

  • Yüksek çekirdek CPU kullanımı -- Konteyner ana bilgisayarında sys ölçümü (çekirdek CPU yüzdesi) %30 veya daha yüksek değerlere ulaşır.

Çekirdek CPU kullanımını kontrol etmek için top komutunu çalıştırın. Aşağıdaki çıktıda sy değerinin %30,0 olması çekirdeğin CPU zamanının önemli bir kısmını tükettiğini gösterir:

top - 16:21:19 up 22 days,  1:59,  3 users,  load average: 40.02, 30.02, 25.06
Tasks: 193 total,   3 running, 190 sleeping,   0 stopped,   0 zombie
%Cpu(s):  20.0 us,  30.0 sy,  0.0 ni, 45.0 id,  5.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 24130808 total,  2071424 free,  1832512 used, 20226872 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 19737776 avail Mem

Teşhis

Cgroup sayısını kontrol edin

Cgroup durumlarını görüntülemek için aşağıdaki komutu çalıştırın:

cat /proc/cgroups

Çıktı, her cgroup alt sistemini dört sütunla listeler:

Sütun Açıklama
subsys_name Cgroup denetleyicisi adı
hierarchy Bu denetleyicinin bağlandığı cgroup hiyerarşisinin kimliği
num_cgroups Bu denetleyiciyi kullanan cgroup sayısı
enabled Bu denetleyicinin etkin (1) veya devre dışı (0) olup olmadığı

Örnek çıktı:

#subsys_name  hierarchy num_cgroups enabled
cpuset  2     200     1
cpu     2     200     1
cpuacct 2     200     1
blkio   6     62      1
memory  10    2040    1
devices 5     59      1

Bu örnekte memory denetleyicisi 2.040 cgroup'a sahiptir; bu değer önerilen 1.000 sınırının oldukça üzerindedir.

Perf ile çekirdek CPU kullanımını profilleyin

Cgroup taramasının CPU zamanı tükettiğini doğrulamak için çekirdek çağrılarını örneklemek üzere perf aracını kullanın.

  1. perf aracını yükleyin:

       yum install perf -y
  2. Sistem genelindeki aktiviteyi 10 saniye boyunca örnekleyin:

       perf record -a -g sleep 10
  3. Sonuçları görüntüleyin: Soruna cgroups neden oluyorsa çıktı, memory cgroup işlevlerinin çekirdek CPU zamanına hakim olduğunu gösterir:

       perf report
       31.04%  [kernel]  [k] memcg_stat_show
       18.61%  [kernel]  [k] memcg_sum_events.isra.22
        9.41%  [kernel]  [k] mem_cgroup_iter
        6.94%  [kernel]  [k] css_next_descendant_pre
        6.11%  [kernel]  [k] _find_next_bit
        3.96%  [kernel]  [k] mem_cgroup_usage.part.43
        1.75%  [kernel]  [k] find_next_bit
        1.38%  [kernel]  [k] mem_cgroup_node_nr_lru_pages

Kök neden

memcg_stat_show işlevi tüm memory cgroup'lar arasındaki istatistikleri toplar. Memory cgroup sayısı aşırı yüksek olduğunda bunların taranması uzun sürer ve önemli miktarda çekirdek CPU tüketir. Yukarıdaki perf çıktısında yalnızca memcg_stat_show işlevi CPU zamanının %31'ini kapsamaktadır.

Aşırı sayıda cpuacct ve cpu cgroup'u da Linux çekirdeğinin Completely Fair Scheduler (CFS) ve yük dengeleme mekanizmasını etkileyebilir.

Önleme yönergeleri

Alibaba Cloud Linux örneklerinizde cgroup kaynaklı performans dalgalanmalarını önlemek için:

  • Üst cgroup başına alt cgroup sayısını sınırlayın -- Her cgroup içinde 10'dan fazla alt cgroup oluşturmayın.

  • Toplam cgroup sayısını sınırlayın -- Sistem genelindeki toplam cgroup sayısını 1.000'in altında tutun. Cgroup sayısı ne kadar az olursa o kadar iyidir.