基本
RHEL7 は、cgroup 階層のシステムを systemd ユニット ツリーにバインドすることで、リソース管理設定をプロセス レベルからアプリケーション レベルに移行します。いくつかの /etc/cg*.conf を編集して cgroup を構成する古い方法 ファイルは引き続き利用できますが、推奨されなくなりました。
Systemd は 3 つのユニット タイプ (スライス 、スコープ 、サービス ) リソース制御の目的で使用されます。
systemdのサービスユニットでcgroupを扱う
1. /etc/systemd/system でサービスのサービス ユニットをカスタマイズします 、サービスにsystemdサービスユニットがない場合。サービスを管理するには、開始/停止スクリプトを作成する必要があります。
# cat /etc/systemd/system/mytask.service [Unit] Description= ** After=remote-fs.target nss-lookup.target [Service] ExecStart=/root/start_process.sh ExecStop=/root/stop_process.sh [Install] WantedBy=multi-user.target
2. コマンド ラインでリソースを制御します (例として、CPU クォータ 60% を制御します)
# systemctl set-property mytask CPUQuota=60%
デフォルトでは、コマンド set-property を介して次の属性のみをサポートします。
AccuracySec= CPUQuota= KillMode= LimitLOCKS= LimitRTPRIO= SendSIGHUP= BlockIOAccounting= CPUShares= KillSignal= LimitMEMLOCK= LimitRTTIME= SendSIGKILL= BlockIODeviceWeight= DefaultDependencies= LimitAS= LimitMSGQUEUE= LimitSIGPENDING= User= BlockIOReadBandwidth= DeviceAllow= LimitCORE= LimitNICE= LimitSTACK= WakeSystem= BlockIOWeight= DevicePolicy= LimitCPU= LimitNOFILE= MemoryAccounting= BlockIOWriteBandwidth= Environment= LimitDATA= LimitNPROC= MemoryLimit= CPUAccounting= Group= LimitFSIZE= LimitRSS= Nice=
3. 上記に記載されていない属性を設定したい場合は、次の方法を使用できます。
# echo 70 > /sys/fs/cgroup/memory/system.slice/httpd.service/memory.swappiness
または、サービス ユニット ファイルを変更してリソースを制御します
# cat /etc/systemd/system/mytask.service [Unit] Description= ** After=remote-fs.target nss-lookup.target [Service] CPUQuota=90% MemoryLimit=1500000 ExecStartPre=/bin/bash -c '/bin/echo 70 > /sys/fs/cgroup/memory/system.slice/httpd.service/memory.swappiness' #ExecStartPost ExecStart=/root/start_process.sh ExecStop=/root/stop_process.sh [Install] WantedBy=multi-user.target
4. systemd マネージャーの設定をリロードし、サービスを開始します
# systemctl daemon-reload # systemctl start mytask