CentOS7に「cgroups」を導入してCPU使用率やネットワーク帯域、ディスクI/Oなどを制御する

CentOS7でサーバーを運用する上で、ある特定のプログラムがリソースを独占するような事態を防ぎたい時があるかと思います。そんな時に力になってくれるのが、「cgroups」です。

もくじ

  • 「cgroups」の概要
  • 「cgroups」のインストール手順
  • 「cgroups」で制御できるもの
  • 設定の手順

「cgroups」の概要

「cgroups」は、1つ以上のプロセスをグループ分けし、グループに対して各種リソース(CPU、ネットワーク帯域、ディスクI/Oなど)の使用量(使用率)を制御するLinuxカーネルの機能です。ある特定のプログラムがリソースを独占するような事態を防ぎたい時などに効果を発揮します。

「cgroups」のインストール手順

以下のコマンドを打てば、cgroupsをインストールできます。

[VIM] sudo yum install libcgroup libcgroup-tools [/VIM]

「cgroups」で制御できるもの

「cgroups」では、プロセスが使用する様々なリソースについて制限をかけることができます。主なものは以下のとおりです。

  • CPU(使用率及び使用するコア)
  • メインメモリ
  • ディスクI/O(ストレージへのアクセス)

cgroupsにおいては、「サブシステム」(リソースコントローラー)と呼ばれるものを使用してリソースの使用率制御などを行います。現在使用可能なサブシステムは、以下のコマンドで確認できます。

[VIM] lssubsys #実行結果例 cpuset cpu,cpuacct memory devices freezer net_cls,net_prio blkio perf_event hugetlb pids [/VIM]

設定の手順

本記事では、主に以下のファイルを編集して設定を行います。 [VIM] /etc/cgconfig.conf /etc/cgrules.conf [/VIM]

まずはcgroupsを起動し、OSの再起動時に自動起動されるような設定を施します。以下のコマンドを打ってください。 [VIM] sudo systemctl enable cgconfig sudo systemctl start cgconfig sudo systemctl enable cgred sudo systemctl start cgred #再起動コマンド sudo systemctl restart cgconfig sudo systemctl restart cgred [/VIM]

/etc/cgconfig.confを編集した場合はcgconfigを、/etc/cgrules.confを編集した場合はcgredを再起動してください。両ファイルの詳しい編集方法はこちらで解説します。

あるユーザーの権限で実行されるプログラム全てにリソース制御を行う

まずはあるユーザーの権限で実行されるプログラム全てにリソース制御を行う設定をしてみます。特定のユーザーの権限でリソースを食いつぶすプログラムが実行される場合や、あるユーザーに対して使用可能なリソースの上限を設けたい場合などに有効です。今回は以下の条件で設定を行います。

マシンスペック

  • OS:CentOS7
  • CPU:3コア
  • メモリ:2GB(0番スロットに1枚)
  • HDD:1台(デバイス番号(メジャー番号、マイナー番号)は8:0)
設定内容
  • ユーザー名hogeの権限で実行されるプログラム全てに制限を適用
  • CPUはすべてのコアを使用
  • CPU1コアの計算資源の3割を割り当てる
  • メモリは512MBまで使用させる
  • HDDへのアクセスは読み取り20MB/s、書き込み10MB/sを上限とする

まずは/etc/cgconfig.confを編集します。 [VIM] sudo vim /etc/cgconfig.conf #以下の内容を追記する group test1 { perm{ task { uid=”hoge”; gid=”hoge”; } admin { uid=”hoge”; gid=”hoge”; } } cpuset { cpuset.cpus=”0-2″; cpuset.mems=”0″; } cpu { cpu.cfs_period_us=”1000000″; cpu.cfs_quota_us=”300000″; } memory { memory.limit_in_bytes=”512M”; memory.memsw.limit_in_bytes=”512M”; } blkio { blkio.throttle.read_bps_device=”8:0 20971520″; blkio.throttle.write_bps_device=”8:0 10485760″; } } [/VIM]

/etc/cgconfig.confを編集したら、/etc/cgrules.confも編集します。 [VIM] sudo vim /etc/cgrules.conf #以下の内容を追記 hoge cpuset,cpu,memory,blkio test1/ [/VIM]

両ファイルの編集が完了したら、以下のコマンドで設定を反映させましょう。 [VIM] sudo systemctl restart cgconfig sudo systemctl restart cgred [/VIM]

設定が完了したら、以下のコマンドでCPU使用率がどれくらいまで上昇するかを確かめましょう。何の制約もない状態で以下のコマンドを実行すると、CPU使用率が100%になります。なお、コマンド実行後に新たなコマンドの入力を受け付けなくなった場合は、Ctrl+C同時押しで対応してください。SSH接続してサーバーを操作している場合は、事前にもう1つコネクションを張り、ターミナル画面を2枚開いて片方ではtopコマンドなどを実行してCPU使用率を確かめられる状態にした後で以下のコマンドを実行することをおすすめします。 [VIM] cat /dev/zero > /dev/null [/VIM]


このように、CPU使用率が設定した上限値くらいに収まっていることが確認できると思います(上の例ではCPU使用率が2割に収まるような設定をしています)。

参考リンク

このブログを応援する・寄付する

当ブログでは暗号通貨による寄付を募っております。

モナゲボタン モナゲボタン

Bitcoin:

Monacoin:

Litecoin: