GNU/Linux >> Linux の 問題 >  >> Cent OS

CentOS/RHEL 7 でユーザープロセスグループに対して systemd でリソース (cgroup) を制御する方法

基本

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


Cent OS
  1. CentOS / RHEL 7 :systemd でランレベル (ターゲット) を変更する方法

  2. CentOS / RHEL 7 :systemd でシリアル getty を構成する方法

  3. CentOS/RHEL 7 で udev サービスの children-max を設定する方法

  1. CentOS/RHEL 7 で現在のカーネルを使用してレスキュー カーネル用に initramfs と vmlinuz を再生成する方法

  2. cgroup を使用して CentOS/RHEL で一部のユーザー メモリ リソースを制限する方法

  3. CentOS/RHEL 7 および 8 で systemd ブート プロセスをデバッグする方法

  1. CentOS8またはRHEL8でネットワークサービスを再起動する方法

  2. CentOS / RHEL 7 :systemd の初心者向けガイド

  3. CentOS/RHEL 7 および 8 で systemd ブート プロセスをデバッグする方法