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

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

系統資訊
作業系統類型和版本
*Ubuntu Linux 20.04.4

Virtualmin 版本 6.17-3*

我是我的伺服器和所有虛擬伺服器的唯一擁有者。我想限制伺服器使用的資源。目前我透過編輯 limit.conf 檔案來設定記憶體使用情況,如下所示 -

oneofmyuser 硬內存鎖 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 上,您可以使用 .pin 將進程固定到 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 相當於 1 個 CPU。

要使用其中任何一個,您必須找出為使用者啟動的進程,並附加上述命令。我不熟悉 Virtualmin,但它是開源的,我懷疑您可以透過 grep 原始碼輕鬆找到它在哪裡啟動這些進程。

CPU 時間limits.conf是以分鐘為單位的 CPU 時間,如時間列所示,top因此它只是允許進程獨佔運行多長時間的度量。

limit.conf 中的「core」值(請參閱 參考資料man limits.conf)指的是核心轉儲檔案的大小,該檔案是您可以在進程崩潰時啟用的轉儲,以進行偵錯。

其背景是 Linux 的設計目的恰恰相反——將任務分佈在 CPU 上——而且它在這方面非常擅長。合理地將任務限制在多核心機器上的 CPU 上的唯一原因是要以完美的計時或計時攻擊來做某事。

其他選項是將作業系統從引導程式鎖定到某些核心,或者您可以模擬單一 CPU 或執行固定到某些 CPU 的容器。

相關內容