限制linux上的进程内存/ CPU使用率

时间:2010-12-05 17:23:03

标签: linux memory process memory-management cpu-usage

有没有办法在Linux中运行进程并限制其内存使用量来说“X”MB和CPU使用率来说“Y”Mhz?

我知道我们可以使用“nice”命令调整调度优先级。但是,手册页没有说明它是否会限制CPU和内存或仅限制CPU(在任何情况下,它都不能用于指定绝对限制)。

感谢,

JP

3 个答案:

答案 0 :(得分:6)

除了ulimit,您可能还想调查cgroups

答案 1 :(得分:2)

理论上,您应该可以使用ulimit来实现此目的。但是,我个人从来没有让它工作过。

答案 2 :(得分:1)

Linux特定答案:

对于运行ulimit -m $LIMIT_IN_KB的历史系统,这将是正确的答案。如今,您必须使用cgroupscgexecsystemd-run

但是,对于仍在过渡到systemd的系统,似乎没有任何解决方案不需要为要使用的每个限制设置预制配置。这是因为此类系统(例如Debian / Ubuntu)仍使用“混合层次结构cgroup”,而systemd仅支持使用较新的“统一层次结构cgroup”设置内存限制。如果您的Linux发行版已经使用统一的层次结构cgroup运行systemd,则运行具有特定限制的给定用户模式进程应该像这样

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上花费一些时间)。

其他信息: