将进程加入cgroup时出现“write error: Invalid argument”错误的问题求助
将进程加入cgroup时出现“write error: Invalid argument”错误的问题求助
问题背景
我在x86_64架构的Red Hat 8.7系统上,想要限制某个进程只能使用50%的CPU时间。之前在测试机上按照Red Hat的cgroups-v1教程成功创建了cgroup并限制了进程CPU,但在生产机上操作时遇到了问题:
我执行了以下步骤:
- 创建新的cgroup:
mkdir /sys/fs/cgroup/cpu/Example/ - 设置50%的CPU限制:
echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us echo "500000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us - 将进程(PID为2335776)加入cgroup:
echo "2335776" > /sys/fs/cgroup/cpu/Example/cgroup.procs
但执行最后一步时返回错误:
bash: echo: write error: Invalid argument
想请教这个错误是什么意思,以及该如何正确将进程加入cgroup?
可能的原因及解决方案
1. 目标进程已不存在
首先确认PID 2335776对应的进程是否还在运行:
ps -p 2335776
如果返回空结果,说明进程已经终止,自然无法加入cgroup,需要确认正确的进程PID。
2. cgroup版本不匹配
Red Hat 8默认可能启用cgroups-v2,而你按照v1的教程操作,会出现兼容性问题。先检查当前系统使用的cgroup版本:
mount | grep cgroup
如果输出中包含cgroup2的挂载信息,说明系统用的是v2,此时改用v2的操作方式:
- 创建cpu子cgroup:
mkdir /sys/fs/cgroup/Example - 设置50%的CPU限制(v2通过
cpu.max配置,格式为quota period):echo "500000 1000000" > /sys/fs/cgroup/Example/cpu.max - 加入进程:
echo 2335776 > /sys/fs/cgroup/Example/cgroup.procs
3. 权限或安全模块限制
生产机上的SELinux或其他安全策略可能阻止写入cgroup文件。可以临时关闭SELinux排查问题:
setenforce 0
如果此时操作成功,说明是SELinux的限制,需要调整cgroup目录的SELinux上下文:
chcon -R system_u:object_r:cgroup_t:s0 /sys/fs/cgroup/cpu/Example/
之后再开启SELinux:
setenforce 1
4. 进程已归属其他cgroup层级
如果进程是由systemd管理的服务进程,它可能已经属于systemd的cgroup,直接写入自定义cgroup会失败。先查看进程当前的cgroup:
cat /proc/2335776/cgroup
如果显示属于systemd的cgroup,建议通过systemd配置CPU限制:修改对应服务的*.service文件,添加以下内容:
[Service] CPUQuota=50%
然后重新加载配置并重启服务:
systemctl daemon-reload systemctl restart your-service.service
备注:内容来源于stack exchange,提问作者folow
相关产品推荐
相关产品推荐

