on it road.com
使用 systemd 的服务单元处理 cgroup
- 如果服务没有 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=
- 如果要设置上面没有列出的属性,可以使用下面的方法。
# 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
- 重新加载 systemd 管理器配置并启动服务
# systemctl daemon-reload # systemctl start mytask
RHEL7 通过将 cgroup 层次结构系统与 systemd 单元树绑定,将资源管理设置从进程级别移动到应用程序级别。
通过编辑几个 /etc/cg*.conf 文件来配置 cgroup 的旧方法仍然可用,但不再推荐。
Systemd 提供了三种用于资源控制的单元类型(slice、scope、service)。
日期:2020-09-17 00:13:26 来源:oir作者:oir