我有一个脚本使用ulimit -t 5
将程序限制为5秒的CPU时间。
该程序现在生成子项,所以我想使用cgroups,所以我可以限制进程占用的CPU,它是孩子们。但是,我找不到对cgroup的CPU使用率设置硬上限的方法。
答案 0 :(得分:3)
Cgroups不会为您杀死进程,但会限制每个特定时段的运行时间。
您可以使用很长的时间段cpu.cfs_period_us
并在该时间段后检查cgroup任务列表。如果任务仍在运行,则使用以下命令手动终止它们:
kill -9 $(cat /sys/fs/cgroup/.../tasks)
cpu.cfs_period_us
指定应该如何定期重新分配cgroup对CPU资源的访问权限的时间段(以微秒为单位,在此表示为“us”)。如果cgroup中的任务应该能够每1秒访问单个CPU 0.2秒,请将cpu.cfs_quota_us设置为200000,将cpu.cfs_period_us设置为1000000.cpu.cfs_quota_us参数的上限为1秒,较低限制是1000微秒。
cpu.cfs_quota_us
指定cgroup中的所有任务可以在一个周期内运行的总时间(以μs表示,此处表示为“us”)(由cpu.cfs_period_us定义)。一旦cgroup中的任务耗尽配额指定的所有时间,它们将在该时间段指定的剩余时间内受到限制,并且不允许在下一个时间段之前运行。如果cgroup中的任务应该能够每1秒访问单个CPU 0.2秒,请将cpu.cfs_quota_us设置为200000,将cpu.cfs_period_us设置为1000000.请注意,quota和period参数基于CPU运行。例如,要允许进程充分利用两个CPU,请将cpu.cfs_quota_us设置为200000,将cpu.cfs_period_us设置为100000。 将cpu.cfs_quota_us中的值设置为-1表示cgroup不遵守任何CPU时间限制。这也是每个cgroup的默认值(根cgroup除外)。