有没有办法在Linux中运行一个进程,并限制它的内存使用量,比如说 "X "MB,CPU使用量,比如说 "Y "Mhz?
我知道我们可以通过使用 "nice "命令来调整调度优先级。但是,man页面并没有说是同时限制CPU和内存还是只限制CPU(无论如何,它不能用来指定绝对限制)。
谢谢。
JP
除了 ulimit,你可能还想研究一下以下问题 cgroups.
理论上,你应该能够使用 极限 为了这个目的。但是,我个人从来没有让它工作过。
Linux的具体答案。
对于运行在历史系统中的 ulimit -m $LIMIT_IN_KB
本来是正确的答案。现在你必须使用 cgroups
和 cgexec
或 systemd-run
.
然而,对于那些仍在过渡到的系统来说。systemd
似乎没有任何解决方案不需要为你想使用的每个限制设置预制配置。这是因为这类系统(如DebianUbuntu)仍然使用 "hybrid hierachy cgroups",而systemd只支持用较新的 "unified hierarchy cgroups "设置内存限制。如果你的Linux发行版已经运行了 systemd
如果使用统一的层次结构cgroups,那么运行一个具有特定限制的给定用户模式的进程,应该是这样的。
systemd-run --user --pipe -p MemoryMax=42M -p CPUWeight=10 [command-to-run ...]
或
systemd-run --user --scope -p MemoryMax=42M -p CPUWeight=10 [command-to-run ...]
关于可能的参数,见 man systemd.resource-control
.
如果我没理解错的话,设置 CPUWeight
指示内核在CPU满负荷工作的情况下你想给多少CPU,默认值为 100
如果多个进程争夺CPU时间,较低的值意味着较少的CPU时间。如果CPU的利用率低于100%,它不会限制CPU的使用,这通常是件好事。如果你真的想强制进程使用少于单核的时间,即使机器处于空闲状态,你可以设置,如 CPUQuota=10%
来强制进程使用10%的单核。如果您设置 CPUQuota=200%
这意味着该进程平均最多可以使用2个核心(但如果没有CPU绑定,它可以在更多的CPU上使用部分时间)。
其他信息。