on  it road.com

使用 systemd 的服务单元处理 cgroup

  1. 如果服务没有 systemd 服务单元,请在 /etc/systemd/system 中为服务自定义一个服务单元。
    我们需要制作一个启动/停止脚本来管理服务。
# 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=
  1. 如果要设置上面没有列出的属性,可以使用下面的方法。
# 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
  1. 重新加载 systemd 管理器配置并启动服务
# systemctl daemon-reload   
# systemctl start mytask
如何在 CentOS/RHEL 7 中使用 systemd 控制用户进程组的资源(cgroup)

RHEL7 通过将 cgroup 层次结构系统与 systemd 单元树绑定,将资源管理设置从进程级别移动到应用程序级别。
通过编辑几个 /etc/cg*.conf 文件来配置 cgroup 的旧方法仍然可用,但不再推荐。

Systemd 提供了三种用于资源控制的单元类型(slice、scope、service)。

日期:2020-09-17 00:13:26 来源:oir作者:oir