如何在 Ubuntu/Virtualmin 中限制 CPU 核心?

如何在 Ubuntu/Virtualmin 中限制 CPU 核心?

系统信息
操作系统类型和版本
*Ubuntu Linux 20.04.4

Virtualmin 版本 6.17-3*

我是我的服务器和所有虚拟服务器的唯一所有者。我想限制服务器使用的资源。目前,我通过编辑 limits.conf 文件来设置内存使用量,如下所示 -

oneofmyuser 硬 memlock 1024

现在我对示例代码中的 CPU 选项感到困惑 -

#Where:
#<domain> can be:
#        - a user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#        - NOTE: group and wildcard limits are not applied to root.
#          To apply a limit to the root user, <domain> must be
#          the literal username root.
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open file descriptors
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#        - chroot - change root to directory (Debian-specific)

我如何限制我的用户仅使用 1 或 2 个核心?有核心值,但应该以 KB 为单位?我想限制为例如 2 个核心?那么多少 KB?对于 CPU 也是如此?对于具有普通 wordpress 站点的普通服务器,这些选项的理想值是什么?

答案1

在 Linux 上,你可以使用 将进程固定到某个 CPU taskset。(请参阅man taskset)。(另请参阅https://unix.stackexchange.com/questions/425065/linux-how-to-know-which-processes-are-pinned-to-which-core

您还可以使用cpulimit(参见man cpulimit),它使用控制组来设置 CPU 使用限制,其中 100 相当于一个 CPU。

要使用其中任何一个,您必须找出为用户启动了哪个进程,然后附加上述命令。我不熟悉 Virtualmin,但它是开源的,我怀疑您可以通过 grepping 源代码相当轻松地找出它在哪里启动这些进程。

CPU 时间limits.conf是以分钟为单位的 CPU 时间,如时间列中所示,top因此它仅衡量允许进程独占运行的时间长度。

limits.conf 中的“core”值(请参阅man limits.conf)是指核心转储文件的大小,当进程崩溃时,您可以启用该转储以进行调试。

其背景是,Linux 的设计初衷恰恰相反——将任务分散到各个 CPU 上——而且它在这方面做得非常好。在多核机器上合理地将任务限制到单个 CPU 上的唯一原因是要以完美的时间安排做某事——或者说是时间攻击。

其他选项是将操作系统锁定到引导加载程序的某些核心,或者您可以模拟单个 CPU 或运行固定到某些 CPU 的容器。

相关内容