メモリ制御グループ (memcg) サービス品質 (QoS) 機能は、Linuxオペレーティングシステムでメモリリソースを管理し、メモリ使用量を最適化するように設計されています。 memcg QoS機能を使用して、重要なサービスまたはアプリケーションの要件を満たすために特定の量のメモリをロックできます。 この機能を使用して、メモリ使用量の上限を指定し、メモリ消費タスクによるシステムの不安定性を防ぐこともできます。 Linuxカーネルのコミュニティバージョンでは、memcg QoS機能はcgroup v2
インターフェイスでのみサポートされます。 カーネルバージョン4.19.91-18.al7
から始まるAlibaba Cloud Linux 2およびAlibaba Cloud Linux 3では、memcg QoS機能もcgroup v1
インターフェイスでサポートされています。
背景情報
デフォルトでは、Alibaba Cloud Linuxカーネルのcgroup v1
インターフェイスでmemcg QoS
機能が有効になっています。 memcg QoS
機能の詳細については、「ドキュメント /管理者ガイド /cgroup-v2.rst
」をご参照ください。 カーネルドキュメントは、Alibaba Cloud LinuxのDebuginfoパッケージとソースコードパッケージから取得できます。 詳細については、「Alibaba Cloud Linux 2の使用」をご参照ください。
使用上の注意
cgroup v1
インターフェイスのmemcg QoS機能を使用する場合は、タスクをmemcgリーフノードに配置することを推奨します。 サンプルタスクパス: /sys/fs/cgroup/memory/<intermediate node>/<leaf node>/tasks
インターフェイス説明
次の表に、Alibaba Cloud Linuxカーネルのcgroup v1
インターフェイスのmemcg QoS機能を実装するインターフェイスを示します。
インターフェイス | 説明 |
memory.min | 特定のメモリ量を絶対にロックします。 このインターフェイスによってロックされたメモリは、システムに他に再利用するメモリがない場合でも、再利用できません。 これにより、cgroup内のプロセスが指定された最小量のメモリを取得できることを保証し、サービスパフォーマンスの低下を防ぎます。 このインターフェイスは、パフォーマンス要件を満たすために最低限の常駐メモリを保証する必要があるサービスに適しています。 インターフェイスで次の読み取りおよび書き込み操作を実行できます。
|
memory.low | 特定のメモリ量を相対的にロックします。 このインターフェースによってロックされたメモリは、システムが他に回収すべきメモリを持たない場合、部分的に回収される。 このように、システムは、リソースが不十分であるとき、より合理的な方法でメモリ割り当てを調整することができる。 このインターフェイスは、重要でないビジネスアプリケーションやバックグラウンドタスクなど、基本的な保護を必要とするが絶対的な保護を必要としないサービスに適しています。 インターフェイスで次の読み取りおよび書き込み操作を実行できます。
|
memory.high | メモリ使用量を制限します。 インターフェイスで次の読み取りおよび書き込み操作を実行できます。
|
例
Alibaba Cloud Linux 3では、メモリを割り当てるか、memcgマウントディレクトリのメモリ使用量の上限 (/sys/fs/cgroup/memory/ など) を指定します。
rootユーザーとしてのみ次のコマンドを実行します。
サンプルコマンド:
次のコマンドを実行して、test_memcgディレクトリを作成します。
mkdir /sys/fs/cgroup/memory/test_memcg
特定のメモリ量を絶対にロックします。
次のコマンドを実行して、200 MBのメモリを完全にロックします。
echo 209715200 > /sys/fs/cgroup/memory/test_memcg/memory.min
次のコマンドを実行して、200 MBのメモリが完全にロックされているかどうかを確認します。
cd /sys/fs/cgroup/memory/test_memcg cat memory.min
特定のメモリ量を相対的にロックします。
次のコマンドを実行して、200 MBのメモリを比較的ロックします。
echo 209715200 > /sys/fs/cgroup/memory/test_memcg/memory.low
次のコマンドを実行して、200 MBのメモリが比較的ロックされているかどうかを確認します。
cd /sys/fs/cgroup/memory/test_memcg cat memory.low
メモリ使用量の上限を指定します。
次のコマンドを実行して、メモリ使用量の上限を1 GBに設定します。
echo 1073741824 > /sys/fs/cgroup/memory/test_memcg/memory.high
次のコマンドを実行して、メモリ使用量の上限が1 GBに設定されているかどうかを確認します。
cd /sys/fs/cgroup/memory/test_memcg cat memory.high