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

Alibaba Cloud Linux:memcg OOM 優先度ポリシー

最終更新日:Sep 01, 2026

Alibaba Cloud Linux 2 はカーネルバージョン 4.19.91-18.al7 以降、Alibaba Cloud Linux 3 はカーネルバージョン 5.10.60-9.al8 以降で、メモリサブシステム (memcg) のメモリ不足 (OOM) 優先度ポリシー機能をサポートしています。本トピックでは、memcg OOM 優先度ポリシー機能のインターフェースについて説明し、設定例を提供します。

背景情報

既存のカーネルシステムでは、メモリプレッシャーが高い場合、カーネルは cgroup を走査し、最もメモリを消費している cgroup からメモリを回収します。回収に失敗した場合、カーネルはメモリ不足 (OOM) イベントをトリガーし、その cgroup 内のすべてのタスクを強制終了する可能性があります。これにより、cgroup で実行されているクリティカルなサービスに深刻な影響を及ぼす可能性があります。そのため、クリティカルなサービスを含む cgroup のメモリが回収されないように保護したり、これらの cgroup 内のタスクが OOM イベントを生き延びられるようにしたりすることが重要です。これにより、カーネルは他の cgroup をメモリ回収または OOM kill の対象として選択できます。

この問題を解決するため、Alibaba Cloud Linux には memcg メモリ不足 (OOM) 優先度設定機能が含まれています。OOM 操作時に、この機能は cgroup の優先度を判定し、低優先度の cgroup を操作対象として選択します。

memcg OOM 優先度インターフェースの機能

インターフェース

説明

memory.use_priority_oom

memcg OOM 優先度ポリシー機能を有効にするかどうかを指定します。有効値は 0 と 1 です。この設定は子 cgroup に継承されません。デフォルト値は 0 です。

  • 0:memcg OOM 優先度ポリシー機能を無効にします。

  • 1:memcg OOM 優先度ポリシー機能を有効にします。

memory.priority

重要度が異なるビジネスをサポートするために memcg 優先度を設定します。優先度レベルは 13 段階あります。有効値の範囲は 0 から 12 です。値が大きいほど優先度が高くなります。この設定は子 cgroup に継承されません。デフォルト値は 0 です。

  • メモリのサービス品質 (QoS) をある程度実装します。優先度の値はグローバル変数ではありません。同一親 cgroup 内の兄弟ノード間の比較にのみ使用されます。

  • 同じ優先度の兄弟ノードについては、カーネルはメモリ使用量順にソートします。OOM 操作は、メモリ使用量が最も高いノードで実行されます。

インターフェース設定例

この例では、6 つの cgroup 子ノード A、B、C、D、E、F を作成し、memory.use_priority_oom インターフェースを有効にし、memory.priority インターフェースを使用して OOM 優先度を設定する方法を説明します。

                root
                /  \
               A    B
              / \  /  \
             C   D E   F

各レベルのインターフェース値は次のとおりです。

  • A:10

  • B:8

  • C:5

  • D:6

  • E:7

  • F:8

  1. ECS インスタンスにリモート接続します。

    詳細については、「Workbench を使用して Linux インスタンスに接続する」をご参照ください。

  2. 次のコマンドを実行して、2 つの cgroup ノード A と B を作成し、memcg OOM 優先度ポリシー機能を有効にします。

    mkdir /sys/fs/cgroup/memory/A
    cd /sys/fs/cgroup/memory/A
    echo 1 >memory.use_priority_oom
    mkdir /sys/fs/cgroup/memory/B
    cd /sys/fs/cgroup/memory/B
    echo 1 >memory.use_priority_oom
  3. 次のコマンドを実行して、ノード A の memcg OOM 優先度を 10 に、ノード B を 8 に設定します。

    cd /sys/fs/cgroup/memory/A
    echo 10 > memory.priority
    cd /sys/fs/cgroup/memory/B
    echo 8 > memory.priority
  4. 次のコマンドを実行して、ノード A の下に子ノード C と D を作成し、ノード B の下に子ノード E と F を作成し、memcg OOM 優先度ポリシー機能を有効にします。

    mkdir /sys/fs/cgroup/memory/A/C
    cd /sys/fs/cgroup/memory/A/C
    echo 1 >memory.use_priority_oom
    mkdir /sys/fs/cgroup/memory/A/D
    cd /sys/fs/cgroup/memory/A/D
    echo 1 >memory.use_priority_oom
    mkdir /sys/fs/cgroup/memory/B/E
    cd /sys/fs/cgroup/memory/B/E
    echo 1 >memory.use_priority_oom
    mkdir /sys/fs/cgroup/memory/B/F
    cd /sys/fs/cgroup/memory/B/F
    echo 1 >memory.use_priority_oom
  5. 次のコマンドを実行して、子ノード C、D、E、F の memcg OOM 優先度をそれぞれ 5、6、7、8 に設定します。

    cd /sys/fs/cgroup/memory/A/C
    echo 5 > memory.priority
    cd /sys/fs/cgroup/memory/A/D
    echo 6 > memory.priority
    cd /sys/fs/cgroup/memory/B/E
    echo 7 > memory.priority
    cd /sys/fs/cgroup/memory/B/F
    echo 8 > memory.priority

root で OOM がトリガーされると、システムは A と B から反復クエリを開始します。B の優先度 (8) は A (10) よりも低いため、システムは B の配下にある E と F のクエリを続行します。E の優先度 (7) は F (8) よりも低いため、cgroup E が OOM 操作の対象として選択されます。