有没有办法在Linux中运行进程并限制其内存使用量来说“X”MB和CPU使用率来说“Y”Mhz?
我知道我们可以使用“nice”命令调整调度优先级。但是,手册页没有说明它是否会限制CPU和内存或仅限制CPU(在任何情况下,它都不能用于指定绝对限制)。
感谢,
JP
答案 0 :(得分:6)
除了ulimit,您可能还想调查cgroups。
答案 1 :(得分:2)
理论上,您应该可以使用ulimit来实现此目的。但是,我个人从来没有让它工作过。
答案 2 :(得分:1)
Linux特定答案:
对于运行ulimit -m $LIMIT_IN_KB
的历史系统,这将是正确的答案。如今,您必须使用cgroups
和cgexec
或systemd-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上花费一些时间)。
其他信息: