如何限制进程的 CPU 和 RAM 使用量?

new*_*ro9 21 cpu ram resource-limiting

我使用的是带有 SFTP 和控制台的 Ubuntu VPS。我需要一个特定的进程来仅使用 60% 的 CPU 和 2048 MB 的 RAM。

我还需要另一个进程仅使用 30% 的 CPU 和 1024MB 的 RAM。

如何限制进程的 CPU 和 RAM 使用量?

mat*_*igo 20

请注意:这里有龙。

\n

当您开始在这种程度上专门控制应用程序/进程/线程的资源时,当需要调试速率限制未考虑到的问题时,您就开始打开字面上的潘多拉问题盒子。

\n

也就是说,如果您相信自己知道自己在做什么,则可以使用三个选项:nicecpulimit和控制组 (Cgroup)。

\n

以下是这三种方法的 TL;DR:

\n

不错\xe2\x87\xa2nice {process}

\n

这是一种非常简单的确定任务优先级的方法,对于“一次性”使用非常有效,例如降低长时间运行、计算量大的任务的优先级,该任务在机器不使用时应该使用更多的 CPU通过其他任务(或人)。

\n

CPU 限制\xe2\x87\xa2cpulimit -l 60 {process}

\n

如果您的服务器性能在 CPU 使用率超过一定量时受到影响(又称停顿),则cpulimit可以帮助减轻系统压力。它通过以不同的时间间隔暂停进程,通过向进程发送信号SIGSTOP将其保持在定义的上限之下来实现这一点。不会改变进程的值,而是监视和控制现实世界的 CPU 使用情况。SIGCONTcpulimitnice

\n

cpulimit当您想要确保进程不使用超过 CPU 的特定部分时(您的问题提到了这一点),您会发现这很有用,但缺点是进程无法使用所有可用的 CPU 时间,当系统空闲(nice允许)。

\n

C组

\n
sudo cgcreate -g cpu:/restrained\nsudo cgset -r cpu.shares=768 restrained\nsudo cgexec -g cpu: restrained {process}\n
Run Code Online (Sandbox Code Playgroud)\n

Cgroups \xe2\x80\x94 控制组 \xe2\x80\x94 是 Linux 内核中内置的一项功能,使您能够控制资源的分配方式。使用 Cgroup,您可以指定分配给组的进程可以使用多少 CPU、内存、带宽或这些资源的组合。

\n

nice与 Cgroup相比,Cgroup 的一个关键优势cpulimit是限制适用于一组进程;不只是一个。nice并且cpulimit还仅限于限制进程的CPU使用率,而Cgroups可以限制其他进程资源。

\n

如果您深入 Cgroup 的兔子洞,那么您可以针对一组特定的任务对系统进行超级优化。

\n


coc*_*mac 12

注意:如果您不想给进程设置硬限制,而只是设置优先级,请查找命令nice。这个答案假设你想要一个硬性限制。

限制CPU使用

这个对另一个问题的精彩回答很好地解释了这一点

安装cpu限制

sudo apt-get install cpulimit
Run Code Online (Sandbox Code Playgroud)

它提供了不同的方法来限制进程的 CPU 使用率foo,比如 20%

  • 通过其进程名称: sudo cpulimit -e foo -l 20.

  • 通过其绝对路径名: sudo cpulimit -P /usr/bin/foo -l 20

  • 通过其PID:

  1. 查找进程的PID:pidof foo。(比如说,它输出 1881)
  2. sudo cpulimit -p 1881 -l 20

限制内存使用

有关更多选项,请参阅这篇有关如何限制 RAM 使用的文章。

例如,要将进程 12345 的 RAM 使用量限制为 2048 MB,您可以使用以下prlimit命令

$ prlimit --pid 12345 --as=2048000000
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“限制地址空间”与“限制 RAM 使用”**不同**。称其为“限制虚拟内存(RAM+交换)”只是好一点,但仍然不正确。例如,人们可以轻松地拥有需要 3GB 或地址空间的程序,同时仅使用 100MB 的 RAM 和 0MB 的交换空间(参见“mmap(2)”和朋友、稀疏数组等)。 (3认同)