linux控制其他程序使用cpu低于50%——笔记
若存在此目录,说明支持CPU控制器
ls /sys/fs/cgroup/cpu/
# 1. 创建默认控制组(限制50% CPU)
sudo mkdir /sys/fs/cgroup/cpu/cpu.default
# 配置CPU限制:周期100ms(100000微秒)内,最多使用50ms(50000微秒),即50%
echo 50000 | sudo tee /sys/fs/cgroup/cpu/cpu.default/cpu.cfs_quota_us
echo 100000 | sudo tee /sys/fs/cgroup/cpu/cpu.default/cpu.cfs_period_us# 2. 创建专属控制组(不限制CPU)
sudo mkdir /sys/fs/cgroup/cpu/cpu.java
# 配置为无限制(-1表示不限制)
echo -1 | sudo tee /sys/fs/cgroup/cpu/cpu.my_config/cpu.cfs_quota_us
echo 100000 | sudo tee /sys/fs/cgroup/cpu/cpu.my_config/cpu.cfs_period_us
创建cpu_control.sh
#!/bin/bash# 获取所有进程PID(排除内核进程,PID>1)
ALL_PIDS=$(pgrep -d ' ' -x -P 1 -o '.*' 2>/dev/null)# 遍历所有进程,分类到不同组
for pid in $ALL_PIDS; do# 跳过已终止的进程if ! ps -p $pid >/dev/null; thencontinueficmd=$(ps -p $pid -o comm=)# 这里=="java"自己改成不限制的程序,现在是不限制java进程if [[ "$cmd" == "java" ]]; then# 特定非限制进程:加入cpu.my_config组echo $pid | sudo tee /sys/fs/cgroup/cpu/cpu.my_config/cgroup.procs >/dev/nullelse# 所有进程:加入cpu.default组(限制50%)echo $pid | sudo tee /sys/fs/cgroup/cpu/cpu.default/cgroup.procs >/dev/nullfi
done
#赋权限
chmod +x /path/to/cpu_control.sh
创建服务文件,这个配置是五秒自动执行一次
sudo vim /etc/systemd/system/cgroup-java-control.service
[Unit]
Description=限制进程 50% CPU[Service]
Type=simple
ExecStart=/bin/bash -c 'while true; do /path/to/cpu_control.sh; sleep 5; done'
Restart=always[Install]
WantedBy=multi-user.target
启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start cpu-control
sudo systemctl enable cpu-control