You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将进程加入cgroup时出现“write error: Invalid argument”错误的问题求助

将进程加入cgroup时出现“write error: Invalid argument”错误的问题求助

问题背景

我在x86_64架构的Red Hat 8.7系统上,想要限制某个进程只能使用50%的CPU时间。之前在测试机上按照Red Hat的cgroups-v1教程成功创建了cgroup并限制了进程CPU,但在生产机上操作时遇到了问题:

我执行了以下步骤:

  1. 创建新的cgroup:
    mkdir /sys/fs/cgroup/cpu/Example/
    
  2. 设置50%的CPU限制:
    echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us
    echo "500000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us
    
  3. 将进程(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 09:44:33