ステータス:非推奨

この記事では、サポートされなくなったバージョンのCentOSについて説明します。 現在CentOS6を実行しているサーバーを運用している場合は、サポートされているバージョンのCentOSにアップグレードまたは移行することを強くお勧めします。

理由 CentOS 6は2020年11月30日に保守終了(EOL)に達し、セキュリティパッチまたはアップデートを受信しなくなりました。 このため、このガイドは維持されなくなりました。

代わりに参照:このガイドは参照として役立つ場合がありますが、他のCentOSリリースでは機能しない場合があります。 可能な場合は、使用しているCentOSのバージョン用に作成されたガイドを使用することを強くお勧めします。

序章

コントロールグループ(cgroups)は、CentOS 6で導入されたカーネル機能であり、プロセスのシステムリソースへのアクセスを制限する新しい方法を提供します。 独自のcgroupを作成したり、構成したcgroupを監視したり、特定のリソースへのcgroupのアクセスを拒否したり、実行中のシステムでcgroupを動的に再構成したりすることもできます。

このチュートリアルでは、プロセスのCPU、メモリ、およびディスクI/Oを制限する方法を説明します。 これを実現するために、最初にいくつかのコントロールグループを作成し、それらにプロセスを追加して、それらがどのように実行されるかを確認します。

前提条件

このチュートリアルを開始する前に、CentOS6ドロップレットでsudoを設定したroot以外のユーザーが必要です。 このタイプのユーザーをセットアップするには、 CentOS6を使用したサーバーの初期セットアップチュートリアルに従ってください。 すべてのコマンドはこのユーザーとして実行されます。

ステップ1—インストール

このセクションでは、cgroupsが機能するために必要なパッケージをインストールします。

コントロールグループとそれらが関連するサブシステムは、シェルコマンドとユーティリティを使用して操作できます。 ただし、cgroupsを操作する最も簡単な方法は、 libcgroup パッケージ。 The libcgroup パッケージは、cgroups関連のコマンドラインユーティリティ、設定ファイル、およびマニュアルページを提供します。 このパッケージは、デフォルトではCentOS6サーバーにインストールされていません。 これをインストールするには、次のコマンドを実行します。

  1. sudo yum install libcgroup

ステップ2—サービスを開始する

The cgconfig(コントロールグループ構成)サービスは、cgroupの作成とサブシステムの管理に使用されます。 起動時に起動し、事前定義されたcgroupを再確立するように構成できるため、再起動後も永続的になります。 The cgconfig CentOS 6ではデフォルトでサービスが開始されないため、次のように開始します。

  1. sudo service cgconfig start

開始 cgconfig サービスは、にマウントされた仮想ファイルシステムを作成します /cgroup すべてのサブシステムで。 これを確認しましょう:

  1. sudo ls /cgroup

このコマンドは、次のサブシステムを表示する必要があります。

blkio  cpu  cpuacct  cpuset  devices  freezer  memory  net_cls

`lscgroup’コマンドを実行して以下を確認することもできます。

  1. sudo lscgroup

サブシステムは少し異なるレイアウトで表示されます。

cpuset:/
cpu:/
cpuacct:/
memory:/
devices:/
freezer:/
net_cls:/
blkio:/

システムリソース

システムリソースはサブシステムと呼ばれ、各サブシステムには、値を割り当てることができるいくつかのパラメーターがあります。 CentOS 6は、10個のcgroupサブシステムを提供します。

  • blkio —このサブシステムは、物理ドライブ(ディスク、ソリッドステート、USBなど)などのブロックデバイスとの間の入出力アクセスに制限を設定します。
  • cpu —このサブシステムは使用可能なCPU時間に制限を設定します
  • cpuacct —このサブシステムは、cgroup内のタスクによって使用されるCPUリソースに関する自動レポートを生成します
  • cpuset —このサブシステムは、個々のCPU(マルチコアシステム上)とメモリノードをcgroup内のタスクに割り当てます
  • devices —このサブシステムは、cgroup内のタスクによるデバイスへのアクセスを許可または拒否します
  • freezer —このサブシステムはcgroup内のタスクを一時停止または再開します
  • memory —このサブシステムは、cgroup内のタスクによるメモリ使用の制限を設定し、それらのタスクによって使用されるメモリリソースに関する自動レポートを生成します
  • net_cls —このサブシステムは、Linuxトラフィックコントローラー(tc)が特定のcgroupタスクから発信されたパケットを識別できるようにするクラス識別子(classid)でネットワークパケットにタグを付けます
  • net_prio —このサブシステムは、ネットワークインターフェイスごとにネットワークトラフィックの優先度を動的に設定する方法を提供します
  • ns —これは名前空間サブシステムです

ステップ3—構成

このセクションでは、サンプルcgroupを作成し、それらのcgroupにいくつかのリソース制限を設定します。 cgroup構成ファイルは /etc/cgconfig.conf. 構成ファイルの内容に応じて、cgconfigは階層の作成、必要なファイルシステムのマウント、cgroupの作成、および各cgroupのサブシステムパラメーター(リソース制限)の設定を行うことができます。

階層は、システム内のすべてのタスクが階層内のcgroupの1つに正確に含まれるように、ツリーに配置されたcgroupのセットです。 デフォルトのCentOS6構成では、各サブシステムは独自の階層に配置されます。

まず、limitcpu、limitmem、limitio、browserという名前のcgroupをいくつか作成しましょう。 The /etc/cgconfig.conf ファイルには、2つの主要なタイプのエントリが含まれています— mountgroup. で始まる行 group cgroupsを作成し、サブシステムパラメーターを設定します。 ファイルを編集する /etc/cgconfig.conf 下部に次のcgroupエントリを追加します。

/etc/cgconfig.conf
group limitcpu{
        cpu {
                cpu.shares = 400;
        }
}

group limitmem{
        memory {
                memory.limit_in_bytes = 512m;
        }
}

group limitio{
        blkio {
                blkio.throttle.read_bps_device = "252:0         2097152";
        }
}

group browsers{
        cpu {
                cpu.shares = 200;
        }
        memory {
                memory.limit_in_bytes = 128m;
        }
}
  • の中に limitcpu cgroup、このcgroupのプロセスで使用可能なCPUシェアを400に制限しています。 cpu.shares cgroup内のタスクに使用可能なCPU時間の相対的なシェアを指定します。
  • の中に limitmem cgroup、cgroupプロセスで使用可能なメモリを512MBに制限しています。
  • の中に limitio cgroupでは、ディスクの読み取りスループットを2MiB/sに制限しています。 ここでは、読み取りI/Oをプライマリディスク/dev/ vdaに制限しています。メジャー:マイナー番号は252:0で、2MiB / sは1秒あたりのバイト数に変換されます(2x1024x1024 = 2097152)。
  • の中に browsers cgroup、cpu共有を200に制限し、使用可能なメモリを128MBに制限しています。

再起動する必要があります cgconfig の変更のためのサービス /etc/cgconfig.conf 有効にするファイル:

  1. sudo service cgconfig restart

有効にしましょう cgconfig システムの起動時に開始します。 chkconfigを使用してサービスを有効にすると、cgroup構成ファイルが読み取られます。 /etc/cgconfig.conf 起動時。 cgroupはセッションごとに再作成され、永続性を維持します。

  1. sudo chkconfig cgconfig on

次に、構成したcgroupが正しく表示されていることを確認します。

  1. lscgroup

すべてがうまくいった場合は、次のように表示されます。

cpuset:/
cpu:/
cpu:/browsers
cpu:/limitcpu
cpuacct:/
memory:/
memory:/browsers
memory:/limitmem
devices:/
freezer:/
net_cls:/
blkio:/
blkio:/limitio

次の目標は、以前に作成したcgroupにリソースを制限するプロセス(タスク)を追加することです。

Cgred (コントロールグループルールエンジンデーモン)は、で設定されたパラメータに従ってタスクをcgroupに移動するサービスです。 /etc/cgrules.conf ファイル。 のエントリ /etc/cgrules.conf ファイルは、次の2つの形式のいずれかを取ることができます。

user subsystems control_group

また

user:command subsystems control_group

user 「@」文字で始まるユーザー名またはグループ名を指します。 subsystems サブシステム名のコンマ区切りリストを参照してください。 control_group cgroupへのパスを表し、 command プロセス名またはプロセスの完全なコマンドパスを表します。 のエントリ /etc/cgrules.conf ファイルには、次の追加の表記を含めることができます。

  • @ —個々のユーザーではなくグループを示します。 例えば、 @admin 管理者グループのすべてのユーザーを示します。
  • * —「すべて」を表します。 例えば、 * ユーザーフィールドのは、すべてのユーザーを表します。
  • % —上の行のアイテムと同じアイテムを表します。

次に、制限したいプログラム/プロセスを追加しましょう。 編集 /etc/cgrules.conf 下部に以下を追加します。

/etc/cgrules.conf
*:firefox       cpu,memory      browsers/
*:hdparm        blkio   limitio/
sammy   blkio   limitio/
@admin:memhog  memory  limitmem/
*:cpuhog        cpu     limitcpu/

上記の行では、次のルールを設定しています。

  • すべてのユーザーが実行するfirefoxプロセスは、自動的にに追加されます。 browsers cgroupであり、CPUおよびメモリサブシステムに制限があります。
  • 任意のユーザーによって実行されるhdparmプロセスがに追加されます limitio cgroupであり、そのcgroupで指定されたパラメーター値に従ってblkioサブシステムで制限されます。
  • ユーザーsammyによって実行されるすべてのプロセスがに追加されます limitio cgroupおよびblkioサブシステムで制限されています。
  • memhog プロセスは、 admin グループがcgroupに追加されます limitmem メモリサブシステムに制限があります。
  • 任意のユーザーによって実行されるcpuhogプロセスがcgroupに追加されます limitcpu CPUサブシステムで制限されています。

開始する必要があります cgred cgrules構成変更のサービスを有効にするには、次のコマンドを使用してこれを実行します。

  1. sudo service cgred start

また、 cgred サービスはシステムの起動時に開始できるようになっているため、再起動後もルールは保持されます。

  1. sudo chkconfig cgred on

注: sysconfigをサポートするサービスの場合、変数を追加できます CGROUP_DAEMON="subsystem:control_group"/etc/sysconfig/servicename 編集する代わりに cgrules.conf ファイル。 たとえば、httpdのようなサービスの場合、次のように追加できます。 CGROUP_DAEMON="blkio:/limitio" ファイルに /etc/sysconfig/httpd.conf httpdプロセスをに追加するには limitio cgroup。

ステップ4—テスト

このステップでは、2MiB / sのディスク読み取りスループット制限が、追加したルールに従って正しく適用されていることを確認します。 cgrules.conf. これを行うには、をインストールして実行します hdparm 道具。 The hdparm ツールは、ハードディスクドライブのハードウェアパラメータを設定および表示したり、読み取りおよび書き込み速度を測定したりすることができます。 以下を使用してhdparmをインストールしましょう:

  1. sudo yum install hdparm

次に、ハードディスク/ dev/vdaの読み取り速度を測定するコマンドを実行してみましょう。

  1. sudo hdparm --direct -t /dev/vda

次の出力が表示されます。

/dev/vda:
 Timing O_DIRECT disk reads:   6 MB in  3.00 seconds =   2.00 MB/sec

出力は、2MB/秒のディスク読み取りスループットを示しています。 両方を停止すると cgconfigcgred サービスを実行し、 hdparm 上記のコマンドをもう一度実行すると、cgroupルールが実装されていないときの元の/デフォルトの読み取り速度を確認できます。

結論

このチュートリアルでは、cgroupで実行できる基本的なことの一部のみを紹介します。 サブcgroupを作成したり、cgroupによって消費されたリソースの量をカウントして報告したり、freezerサブシステムを使用してプロセスのグループを一時停止したりすることもできます。

詳細については、次のリソースを確認してください。