cgroups を使用して AL2023 でプロセスのリソース使用量を制限する - Amazon Linux 2023

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

cgroups を使用して AL2023 でプロセスのリソース使用量を制限する

systemd によるリソースコントロール を使用することが推奨されますが、このセクションでは、基本の libcgroup-tools ユーティリティを使ってプロセスの CPU とメモリの使用量を制限する基本的な方法を説明します。どちらも、以前 EPEL に含まれていた cpulimit ユーティリティの代わりに使用できる手段です。

以下の例では、libcgroup-tools パッケージのユーティリティと sysfs の調整可能なオプションを使用して CPU とメモリの使用量を制限しながら、(stress-ng パッケージから) stress-ng ストレステストを実行する方法について説明します。

コマンドラインで libcgroup-tools を使用してリソース使用量を制限する
  1. libcgroup-tools パッケージをインストールします。

    [ec2-user ~]$ sudo dnf install libcgroup-tools
  2. memory および cpu コントローラーを使用して cgroup を作成し、名前 (our-example-limits) を付けます。-a および -t オプションを使用して、ec2-user ユーザーが cgroup の調整可能なオプションを制御できるようにします。

    [ec2-user ~]$ sudo cgcreate -a ec2-user -t ec2-user -g memory,cpu:our-example-limits

    /sys/fs/cgroup/our-example-limits/ ディレクトリが追加されており、調整可能な各オプションの制御に使用できるファイルが含まれています。

    注記

    Amazon Linux 2 では、AL2023 で使用される cgroup-v1 ではなく cgroup-v2 を使用します。AL2 では sysfs のパスが異なり、ec2-user が所有する /sys/fs/cgroup/memory/our-example-limits および /sys/fs/cgroup/cpu/our-example-limits ディレクトリに、cgroup の制限を制御するために使用できるファイルが格納されています。

  3. cgroup のすべてのプロセスのメモリ使用量を 1 億バイトに制限します。

    [ec2-user ~]$ echo 100000000 > /sys/fs/cgroup/our-example-limits/memory.max
    注記

    Amazon Linux 2 では、Amazon Linux 2023 が使用する cgroup-v2 ではなく cgroup-v1 を使用します。つまり、調整可能なオプションが一部異なります。AL2 でメモリ使用量を制限するには、代わりに以下の調整可能なオプションが使用されます。

    [ec2-user ~]$ echo 10000000 > /sys/fs/cgroup/memory/our-example-limits/memory.limit_in_bytes
  4. cgroup のすべてのプロセスの CPU 使用率を 10% に制限します。cpu.max ファイルの形式は $MAX $PERIOD で、グループの使用量が $PERIOD につき $MAX に制限されます。

    [ec2-user ~]$ echo 10000 100000 > /sys/fs/cgroup/our-example-limits/cpu.max

    Amazon Linux 2 では、Amazon Linux 2023 が使用する cgroup-v2 ではなく cgroup-v1 を使用します。つまり、CPU 使用率の制限方法など、調整可能なオプションが一部異なります。

  5. 以下の例では、our-example-limits cgroup で stress-ng (dnf install -y stress-ng を実行してインストール可能) を実行します。stress-ng コマンドの実行中に、top コマンドを使用して、使用率が CPU 時間の 10% に制限されていることを確認できます。

    [ec2-user ~]$ sudo cgexec -g memory,cpu:our-example-limits stress-ng --cpu 1
  6. cgroup を削除してクリーンアップします。

    [ec2-user ~]$ sudo cgdelete -g memory,cpu:our-example-limits

Linux カーネルの cgroup-v2 のドキュメントには、その仕組みに関する詳細な情報が含まれています。CPU およびメモリコントローラーのドキュメントでは、調整可能な各オプションの使用方法について詳しく説明しています。