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

问题描述 投票:5回答:3

有没有办法在Linux中运行一个进程,并限制它的内存使用量,比如说 "X "MB,CPU使用量,比如说 "Y "Mhz?

我知道我们可以通过使用 "nice "命令来调整调度优先级。但是,man页面并没有说是同时限制CPU和内存还是只限制CPU(无论如何,它不能用来指定绝对限制)。

谢谢。

JP

linux memory process memory-management cpu-usage
3个回答
6
投票

除了 ulimit,你可能还想研究一下以下问题 cgroups.


2
投票

理论上,你应该能够使用 极限 为了这个目的。但是,我个人从来没有让它工作过。


0
投票

Linux的具体答案。

对于运行在历史系统中的 ulimit -m $LIMIT_IN_KB 本来是正确的答案。现在你必须使用 cgroupscgexecsystemd-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上使用部分时间)。

其他信息。

© www.soinside.com 2019 - 2024. All rights reserved.