全部产品
Search
文档中心

Alibaba Cloud Linux:Cara mencegah fluktuasi performa aplikasi yang disebabkan oleh cgroups

更新时间:Jan 09, 2026

Control groups (cgroups) adalah fitur kernel Linux yang digunakan untuk mengalokasikan, mengelola, dan memantau sumber daya sistem. Jika hierarki atau jumlah cgroups tidak sesuai dengan kebutuhan sistem, kinerja aplikasi dapat menurun. Topik ini menjelaskan masalah jitter kinerja aplikasi yang disebabkan oleh cgroups serta cara mencegahnya.

Deskripsi masalah

Dalam skenario berbasis container, aplikasi kadang-kadang mengalami peningkatan latensi permintaan. Secara bersamaan, penggunaan CPU sys pada host container mencapai 30% atau lebih. Metrik sys merepresentasikan persentase waktu CPU yang dihabiskan di kernel space. Misalnya, ketika Anda menjalankan perintah top untuk melihat data performa Linux, nilai sy menunjukkan angka 30% atau lebih tinggi.

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

Penyebab yang mungkin

Sebagai contoh, jika Anda menjalankan perintah cat /proc/cgroups untuk melihat status semua cgroups, output-nya mungkin menunjukkan bahwa jumlah cgroups untuk memory mencapai 2.040.

#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

Dalam kasus ini, Anda dapat menggunakan perf untuk menganalisis dan mengidentifikasi penyebab masalah tersebut.

  1. Jalankan perintah berikut untuk menginstal perf:

    yum install perf -y
  2. Jalankan perintah berikut untuk melakukan sampling dan menganalisis proses sistem:

    perf record -a -g sleep 10
  3. Jalankan perintah berikut untuk melihat hasil analisis:

    perf report

    Berikut ini contoh output-nya:

    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

    Hasil analisis menunjukkan bahwa sebagian besar waktu proses kernel Linux dihabiskan dalam fungsi memcg_stat_show. Hal ini terjadi karena jumlah cgroups yang terkait dengan memory terlalu banyak, sehingga menyebabkan kernel menghabiskan waktu lama untuk melakukan traversal.

    Selain itu, jumlah cgroups yang berlebihan yang sesuai dengan cpuacct dan cpu juga dapat memengaruhi kinerja Completely Fair Scheduler (CFS) dan mekanisme penyeimbangan beban kernel Linux.

Solusi

Saat melakukan operasi dan maintenance (O&M) pada instans Linux, ikuti saran berikut untuk mencegah jitter performa aplikasi yang disebabkan oleh cgroups.

  • Pertahankan hierarki cgroup hingga maksimal 10 level.

  • Batasi jumlah total cgroups hingga maksimal 1.000. Usahakan jumlah cgroups serendah mungkin.