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

Alibaba Cloud Linux:Memcg OOM優先ポリシー

最終更新日:Jul 05, 2024

Alibaba Cloud Linux 2のカーネルバージョン4.19.91-18.al7とAlibaba Cloud Linux 3のカーネルバージョン5.10.60-9.al8は、memcg out of memory (OOM) 優先ポリシー機能をサポートしています。 このトピックでは、memcg OOM優先ポリシー機能に提供されるインターフェイスと、これらのインターフェイスの使用方法について説明します。

背景情報

既存のカーネルシステムでは、メモリが不十分な場合、カーネルはcgroupをトラバースし、大量のメモリを消費するcgroupからメモリを再利用します。 cgroupからメモリを再利用できない場合、OOMエラーが報告され、cgroup内のすべてのタスクが停止します。 これは、cgroupの重要なビジネスに影響します。 重要なビジネスを含むcgroupsによって占有されているメモリが再利用されないようにし、これらのcgroupsのタスクが引き続き実行できるようにして、カーネルが他のcgroupsからメモリを再利用したり、OOMエラーをトリガーしたりできるようにするため、Alibaba Cloud Linuxはmemcg OOM優先ポリシー機能を提供しています。

この機能を有効にすると、カーネルシステムはcgroupの優先度を決定し、優先度の低いcgroupでOOMエラーをトリガーします。

インターフェイス

インターフェイス

説明

memory.us e_priority_oom

このインターフェイスは、memcg OOM優先ポリシー機能を有効にするかどうかを指定するために使用されます。 有効な値: 0と1。 親cgroupの優先順位は、その子cgroupによって継承されない。 デフォルト値:0

  • 値0は、memcg OOM優先度ポリシー機能が無効になっていることを示します。

  • 値1は、memcg OOM優先ポリシー機能が有効になっていることを示します。

memory.priority

このインターフェイスは、さまざまな重要度のビジネスをサポートするために13の重要度を提供します。 有効な値: 0 ~ 12。 値が大きいほど優先度が高いことを示す。 親cgroupの優先順位は、その子cgroupによって継承されない。 デフォルト値:0

  • このインターフェイスは、QoS (quality of service) を実装するために使用されます。 priorityの値はグローバル変数ではなく、同じ親cgroupの子cgroup間でのみ比較できます。

  • カーネルシステムは、メモリ使用量によって同じ優先順位を持つ子cgroupをソートし、最大量のメモリを消費する子cgroupでOOMエラーをトリガーします。

インターフェイスの設定例

Elastic Compute Service (ECS) インスタンスの場合、次の階層に示すように、A、B、C、D、E、およびFという名前の6つの子cgroupを作成します。 memory.us e_priority_oomインターフェイスを有効にし、memory.priorityインターフェイスを指定してoom優先度を設定します。

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

次のセクションでは、子cgroupsに設定されるmemory.priorityインターフェイスの値について説明します。

  • A: 10

  • B: 8

  • C: 5

  • D: 6

  • E: 7

  • F: 8

  1. ECS インスタンスに接続します。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  2. AおよびBという名前の子cgroupsを作成し、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. OOMの優先順位Aを10に、OOMの優先順位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という名前の子cgroupを作成し、Bの下にEとFという名前の子cgroupを作成し、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のOOM優先順位を5に、DのOOM優先順位を6に、EのOOM優先順位を7に、FのOOM優先順位を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

ルートアカウントが使用されているときにOOMエラーをトリガーするために、システムはAとBから繰り返しクエリを開始します。Bの優先度はAの優先度よりも低いので、システムはBの下でEおよびFに問い合わせを続ける。システムは、Eが子cgroupの中で最も低い優先度を有すると判断し、E上でOOMエラーをトリガする。