Gio*_*nir 40 command-line cpu centos limit
我运行的 Linux 系统有很多用户,但有时会发生滥用;用户可能会运行一个占用超过 80% 的 CPU/内存的进程。
那么有没有办法通过限制进程可以使用的 CPU 使用量(例如 10%)来防止这种情况发生?我知道cpulimit
,但不幸的是,它对我指示它限制的进程(例如单个进程)应用了限制。所以我的问题是,如何将限制应用于所有正在运行的进程和将来将运行的进程,而无需提供它们的 id/path 例如?
小智 32
不错/蕾妮丝
nice
是对系统进行“一次性”调整的绝佳工具。
nice COMMAND
Run Code Online (Sandbox Code Playgroud)
处理器限制
cpulimit
如果您需要运行 CPU 密集型作业并且拥有空闲 CPU 时间对于系统的响应能力至关重要。
cpulimit -l 50 -- COMMAND
Run Code Online (Sandbox Code Playgroud)
群组
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
Run Code Online (Sandbox Code Playgroud)
资源
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
vin*_*c17 24
虽然它可能会滥用内存,但它不适用于 CPU:当 CPU 空闲时,正在运行的进程(通过“运行”,我的意思是该进程不等待 I/O 或其他东西)将占用默认情况下 100% CPU 时间。而且没有理由强制执行限制。
现在,您可以通过nice
. 如果您希望它们应用于给定用户的所有进程,您只需要确保他的登录 shell 运行时使用nice
:子进程将继承该nice
值。这取决于用户如何登录。例如,请参阅优先 ssh 登录(不错)。
或者,您可以设置虚拟机。实际上,设置每个进程的限制没有多大意义,因为用户可以启动多个进程,从而滥用系统。对于虚拟机,所有限制对虚拟机都是全局的。
另一种解决方案是设置/etc/security/limits.conf
限制;请参阅limits.conf(5) 手册页。例如,您可以设置每次登录的最大 CPU 时间和/或每次登录的最大进程数。您还可maxlogins
以为每个用户设置为 1。
对于记忆,你正在寻找的是ulimit -v
。请注意,它ulimit
是由子进程继承的,因此如果您在登录时将其应用于用户的登录shell,则它适用于他的所有进程。
如果您的用户都使用bash
登录 shell,则放入以下行/etc/profile
应该会导致所有用户进程的硬限制为 1 GB(更准确地说,一百万千字节):
ulimit -vH 1000000
Run Code Online (Sandbox Code Playgroud)
该选项H
确保它是一个硬限制,也就是说,用户之后无法将其重新设置。当然,用户仍然可以通过一次启动足够多的进程来填充内存。
对于其他 shell,您必须找出它们读取的初始化文件(以及ulimit
它们使用的其他命令)。
对于CPU,你想要的对我来说似乎没有意义。当只有一个进程运行时,让 90% 的 CPU 闲置有什么用呢?我认为你真正想要的是nice
(并且可能ionice
)。请注意,像 一样ulimit
,nice
值由子进程继承,因此在登录时将其应用到登录 shell 就足够了。我想这也适用,ionice
但我不确定。
小智 6
既然你的标签有centos
,你就可以使用systemd
。
例如,如果您想限制 ID 为的用户1234
:
sudo systemctl edit --force user-1234.slice
然后输入并保存:
[Slice]
CPUQuota=10%
该用户下次登录时将会产生影响。
手册页:systemctl
、systemd.slice
、systemd.resource-control
...
归档时间: |
|
查看次数: |
67153 次 |
最近记录: |