すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Linux:cgroup に起因するアプリケーションパフォーマンスのジッターを防ぐ方法

最終更新日:Jan 09, 2026

コントロールグループ (cgroup) は、システム上のリソースを割り当て、管理、監視するために使用できる Linux カーネルの機能です。cgroup の階層や数がシステムに対して適切でない場合、アプリケーションのパフォーマンスが低下する可能性があります。このトピックでは、cgroup に起因するアプリケーションパフォーマンスのジッターの問題と、その発生を防ぐ方法について説明します。

問題の説明

コンテナーベースのシナリオでは、アプリケーションでリクエストのレイテンシーが時折増加することがあります。同時に、コンテナーのホストにおける `sys` CPU 使用率が 30% 以上に達します。`sys` メトリックは、カーネル空間で費やされた CPU 時間の割合です。たとえば、top コマンドを実行して Linux のパフォーマンスデータを確認すると、`sy` の値が 30% 以上になります。

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

考えられる原因

たとえば、cat /proc/cgroups コマンドを実行してすべての cgroup のステータスを表示すると、出力からメモリの cgroup 数が 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

この場合、perf を使用して問題を分析し、原因を特定できます。

  1. 次のコマンドを実行して perf をインストールします:

    yum install perf -y
  2. 次のコマンドを実行して、システムのプロセスをサンプリングおよび分析します:

    perf record -a -g sleep 10
  3. 次のコマンドを実行して、分析結果を表示します:

    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

    分析結果は、Linux カーネルの実行時間の大半が memcg_stat_show 関数で費やされていることを示しています。これは、メモリに関連付けられた cgroup の数が過剰であるため、カーネルがそれらを走査するのに長い時間がかかることが原因です。

    さらに、cpuacct と cpu に対応する cgroup の数が過剰になると、Completely Fair Scheduler (CFS) のパフォーマンスや Linux カーネルの負荷分散メカニズムにも影響を与える可能性があります。

解決策

Linux インスタンスで運用保守 (O&M) を行う際、cgroup に起因するアプリケーションパフォーマンスのジッターを防ぐには、以下の点を推奨します。

  • cgroup 階層を 10 レベル以下に維持します。

  • cgroup の総数を 1,000 以下に制限します。cgroup の数はできるだけ少なくしてください。