限制进程不超过 CPU 使用率的 10%

限制进程不超过 CPU 使用率的 10%

我使用的Linux系统有很多用户,但有时会出现滥用情况;用户可能运行一个占用超过 80% CPU/内存的进程。

那么有没有办法通过限制进程可以使用的 CPU 使用量(例如 10%)来防止这种情况发生?我知道cpulimit,但不幸的是,它对我指示它限制的进程(例如单个进程)应用了限制。所以我的问题是,如何将限制应用于所有正在运行的进程和将来将运行的进程,而无需提供它们的 id/路径?

答案1

尼斯/雷尼斯

nice是对系统进行“一次性”调整的绝佳工具。

 nice COMMAND

CPU限制

cpulimit如果您需要运行 CPU 密集型作业,并且空闲 CPU 时间对于系统的响应能力至关重要。

cpulimit -l 50 -- COMMAND

cgroups

cgroups将限制应用于一组进程,而不是仅一个进程

cgcreate -g cpu:/cpulimited
cgset -r cpu.shares=512 cpulimited
cgexec -g cpu:cpulimited COMMAND_1
cgexec -g cpu:cpulimited COMMAND_2
cgexec -g cpu:cpulimited COMMAND_3

资源

http://blog.scoutapp.com/articles/2014/11/04/restricting-process-cpu-usage-using-nice-cpulimit-and-cgroups
http://manpages.ubuntu.com/manpages/xenial/man1/cpulimit.1.html

答案2

虽然它可能会滥用内存,但不会滥用 CPU:当 CPU 空闲时,正在运行的进程(通过“运行”,我的意思是该进程不等待 I/O 或其他东西)将占用内存。默认情况下为 100% CPU 时间。并且没有理由强制执行限制。

现在,您可以通过 来设置优先级nice。如果您希望它们应用于给定用户的所有进程,您只需确保用户的登录 shell 运行nice:子进程将继承该nice值。这取决于用户登录的方式。请参阅优先考虑 ssh 登录(很好)例如。

或者,您可以设置虚拟机。事实上,设置每个进程的限制没有多大意义,因为用户可以启动许多进程,从而滥用系统。对于虚拟机,所有限制对于虚拟机来说都是全局的。

另一个解决方案是设定/etc/security/limits.conf限制;请参阅 limit.conf(5) 手册页。例如,您可以设置每次登录的最大 CPU 时间和/或每次登录的最大进程数。您还可maxlogins以为每个用户设置为 1。

答案3

你看过cgroup吗?有一些关于拱门维基关于他们。阅读有关 的部分cpu.shares,看起来它正在做您需要的事情,并且它们可以在用户级别上操作,因此您可以立即限制所有用户进程。

答案4

既然你的标签有centos,你就可以使用systemd

例如,如果您想限制 ID 为的用户1234

sudo systemctl edit --force user-1234.slice

然后输入并保存:

[Slice] CPUQuota=10%

该用户下次登录时将会产生影响。

手册页:systemctlsystemd.slicesystemd.resource-control...

相关内容