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エラーをトリガーします。
インターフェイス
インターフェイス | 説明 |
| このインターフェイスは、memcg OOM優先ポリシー機能を有効にするかどうかを指定するために使用されます。 有効な値: 0と1。 親cgroupの優先順位は、その子cgroupによって継承されない。 デフォルト値:0
|
| このインターフェイスは、さまざまな重要度のビジネスをサポートするために13の重要度を提供します。 有効な値: 0 ~ 12。 値が大きいほど優先度が高いことを示す。 親cgroupの優先順位は、その子cgroupによって継承されない。 デフォルト値:0
|
インターフェイスの設定例
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
ECS インスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
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
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
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
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エラーをトリガする。