限制允许进程树使用的CPU百分比?

时间:2015-07-25 06:31:48

标签: linux unix

我可以限制正在运行的进程的CPU百分比及其当前和未来的所有子进程可以使用的组合吗?我听说过cpulimit工具,但这似乎忽略了子进程。

修改:所以the answer我发现需要cpulimit才能持续运行,直到我们希望限制保持有效,因为它通过主动发送暂停来进行限制然后继续向过程发出信号。是否有其他方法可以实现这种限制效果,也许不需要在后台运行这样的辅助过程?

2 个答案:

答案 0 :(得分:7)

是!

就像我写这个问题一样,发现我正在尝试使用cpulimit的旧版本。

new version也支持限制子进程。

$ cpulimit -h
Usage: cpulimit [OPTIONS...] TARGET
   OPTIONS
      -l, --limit=N          percentage of cpu allowed from 0 to 400 (required)
      -v, --verbose          show control statistics
      -z, --lazy             exit if there is no target process, or if it dies
      -i, --include-children limit also the children processes
      -h, --help             display this help and exit
   TARGET must be exactly one of these:
      -p, --pid=N            pid of the process (implies -z)
      -e, --exe=FILE         name of the executable program file or path name
      COMMAND [ARGS]         run this command and limit it (implies -z)

Report bugs to <marlonx80@hotmail.com>.

答案 1 :(得分:0)

最近几天我一直在研究此问题,并且我发现至少还有两个选择:cgroups和CPU亲和力

鉴于该主题已被浏览超过2000次,并且很难找到一个好的信息来源,因此请在此处发表我的笔记以供将来参考。

cgroups

  • 注意事项:您不能在Docker内部使用cgroup,并且需要root访问权限才能进行一次性设置。

  • 有cgroups v1v2。截至2020-04-22,默认情况下只有Red Hat切换到v2,并且您不能同时使用两者。也就是说,您可能正在使用v1。

  • 您需要root才能创建一个cgroup目录/将您的系统配置为在启动时创建一个cgroup目录,并将访问权限委派给您的非root用户,就像这样:

    • v1:mkdir /sys/fs/cgroup/cpu/&lt;directory&gt;/ && chown -R user /sys/fs/cgroup/cpu/&lt;directory&gt;/(这专门用于限制CPU使用-其他cgroup'controller'使用不同的目录;一个进程可以在多个cgroup中)

    • v2:mkdir /sys/fs/cgroup/unified/&lt;directory&gt; && chown -R user /sys/fs/cgroup/unified/&lt;directory&gt;(这是统一的cgroup层次结构,您可以通过单个cgroup控制所有cgroup的“控制器”;一个进程只能在一个cgroup中,并且该cgroup不能包含其他cgroup-例如叶子cgroup)

  • 通过写入此树中的控制文件来配置cgroup:

    • 使用cpu.cfs_quota_uscpu.cfs_period_us(例如echo 10000 > cpu.cfs_quota_us

    • )配置CPU配额
    • 通过将进程的pid写入cgroup.procs控制文件来将进程添加到新的cgroup。 (所有子进程都自动位于同一cgroup中。)

此链接具有更多信息: https://drill.apache.org/docs/configuring-cgroups-to-control-cpu-usage/

CPU关联性

您只能使用CPU关联性将CPU使用率限制为整数个逻辑CPU(即CPU核心),而不是特定百分比。在当今的多核系统上,这可能已经足够了。

此功能的文档位于$ man sched_setaffinity。请注意,cgroup还支持通过cpuset控制器设置CPU亲和力。