CPUTool - 限制和控制 Linux 中任何程序的 CPU 使用率
CPU 利用率是決定系統性能的重要因素。當系統上執行多個程序時,CPU 可能會過載,這可能導致系統性能下降甚至崩潰。為避免這種情況,必須控制和限制各個程序的 CPU 利用率。
CPUTool 是一款命令列工具,可用於限制和控制 Linux 系統上執行的任何程序的 CPU 利用率。它的工作原理是設定程序的 CPU 親緣性和優先順序,允許您將 CPU 處理能力的特定百分比分配給特定程序。
本文將討論如何在 Linux 中安裝和使用 CPUTool 來限制和控制任何程序的 CPU 利用率。
CPUTool 的安裝
CPUTool 在大多數 Linux 發行版的軟體倉庫中都可用。您可以使用發行版的包管理器來安裝 CPUTool。例如,如果您使用的是 Ubuntu 或 Debian,則可以透過在終端中執行以下命令來安裝 CPUTool:
sudo apt-get install cpuset
對於 CentOS 和其他基於 RedHat 的發行版,您可以透過執行以下命令來安裝 CPUTool:
sudo yum install cpuset
CPUTool 的基本用法
安裝 CPUTool 後,您可以開始使用它來控制系統上執行的任何程序的 CPU 利用率。使用 CPUTool 的基本語法如下:
sudo cpuset -p PROCESS_ID -l CPU_LIST -u CPU_LIST
其中,PROCESS_ID 是您要控制的程序的 ID,CPU_LIST 是您要分配給程序的 CPU 核心列表,-u 是您要分配給程序的 CPU 份額。預設情況下,每個程序的 CPU 份額為 1024,這意味著它可以利用 CPU 處理能力的 100%。
要限制程序的 CPU 利用率,您需要降低其 CPU 份額。例如,如果您想將 ID 為 1234 的程序的 CPU 利用率限制在 50%,則可以執行以下命令:
sudo cpuset -p 1234 -u 512
這會將 CPU 處理能力的 50% 分配給 ID 為 1234 的程序。您還可以透過指定要分配給程序的 CPU 核心來設定程序的 CPU 親緣性。例如,如果您只想將 CPU 核心 0 和 1 分配給 ID 為 1234 的程序,則可以執行以下命令:
sudo cpuset -p 1234 -l 0,1
這會將 CPU 核心 0 和 1 分配給 ID 為 1234 的程序。
CPUTool 的高階用法
CPUTool 還提供高階功能,使您能夠同時控制多個程序的 CPU 利用率。您可以將程序分組到一個“cpuset”中,併為該 cpuset 分配特定的 CPU 份額。
要建立 cpuset,您需要在 /sys/fs/cgroup/cpuset/ 目錄中建立一個名為 cpuset 的目錄。例如,如果您想建立一個名為“mycpuset”的 cpuset,則可以執行以下命令
sudo mkdir /sys/fs/cgroup/cpuset/mycpuset
然後,您可以透過將程序 ID 寫入 cpuset 的 tasks 檔案來將程序移動到 cpuset 中。例如,如果您想將 ID 為 1234 的程序移動到“mycpuset”cpuset,則可以執行以下命令:
echo 1234 | sudo tee /sys/fs/cgroup/cpuset/mycpuset/tasks
您可以透過將值寫入 cpuset 的 cpu.shares 檔案來限制 cpuset 的 CPU 利用率。該值表示 cpuset 與其他 cpuset 相比可以使用的 CPU 時間的相對份額。例如,如果您想將“mycpuset”cpuset 的 CPU 利用率限制在 20%,則可以執行以下命令:
echo 20 | sudo tee /sys/fs/cgroup/cpuset/mycpuset/cpu.shares
這會將“mycpuset”cpuset 中所有程序的 CPU 利用率限制在總 CPU 時間的 20%。
您還可以使用 CPUTool 限制系統中所有程序的 CPU 利用率。為此,您需要為“system”cpuset 設定 CPU 利用率限制。您可以透過執行以下命令來實現:
sudo cpuset -c system -l 50
這會將系統中所有程序的 CPU 利用率限制在 50%。您可以根據需要調整該值。
為特定使用者設定 CPU 限制
CPUTool 允許為特定使用者或組設定 CPU 限制,而不會影響整個系統。在您希望限制特定使用者或使用者組的 CPU 利用率的情況下,此功能非常有用。請按照以下步驟為使用者設定 CPU 限制:
為使用者建立 cpuset:
在 /sys/fs/cgroup/cpuset/ 目錄中建立一個新的目錄,並以使用者名稱命名。例如,如果您想為名為“user_name”的使用者建立 cpuset,請執行以下命令:
sudo mkdir /sys/fs/cgroup/cpuset/user_name
為 cpuset 設定 CPU 份額:
透過將值寫入 cpu.shares 檔案來為使用者的 cpuset 分配 CPU 份額。例如,要為 user_name cpuset 分配 100 個 CPU 份額,請執行以下命令:
sudo echo "100" > /sys/fs/cgroup/cpu/user_name/cpu.shares
將使用者的程序移動到 cpuset:
透過將使用者的程序 ID 寫入 cpuset 的 tasks 檔案來將使用者的所有程序移動到新建立的 cpuset。例如,如果您想將 user_name 的所有程序移動到 cpuset,請執行以下命令:
sudo pgrep -u user_name | sudo tee /sys/fs/cgroup/cpuset/user_name/tasks > /dev/null
這會將 user_name 的所有程序移動到 cpuset。
使用 CPUTool 和 Systemd 限制 CPU 利用率
要限制 Linux 中程序或程序組的 CPU 利用率,您可以結合使用 CPUTool 和 Systemd。第一步是為要限制的程序建立一個 Systemd 服務檔案,方法是使用命令 sudo nano /etc/systemd/system/myprocess.service 用文字編輯器(如 nano)開啟該檔案。在此檔案中,您應該新增程序的單元描述和服務詳細資訊,包括啟用 CPU 計費和程序的可執行檔案的路徑。
建立 Systemd 服務檔案後,您應該使用命令 sudo systemctl daemon-reload 重新載入 Systemd 配置,並使用命令 sudo systemctl start myprocess 啟動服務。您可以透過使用命令 sudo systemctl status myprocess 檢查服務狀態來驗證服務是否正確執行。
接下來,透過使用命令 sudo mkdir /sys/fs/cgroup/cpuset/myprocess 在 /sys/fs/cgroup/cpuset/ 目錄中建立具有程序名稱的目錄來為程序建立 cpuset。使用命令 sudo echo "100" > /sys/fs/cgroup/cpu/myprocess/cpu.shares 為 cpuset 設定 CPU 份額。CPU 份額決定分配給 cpuset 的 CPU 時間的比例。
最後,使用命令 sudo pgrep myprocess | sudo tee /sys/fs/cgroup/cpuset/myprocess/tasks > /dev/null 將程序移動到 cpuset。這會將程序移動到 cpuset 並根據分配給 cpuset 的 CPU 份額限制其 CPU 利用率。
透過遵循這些步驟,您可以有效地使用 CPUTool 和 Systemd 限制 Linux 中程序或程序組的 CPU 利用率。
結論
CPUTool 是一款強大的工具,可用於控制 Linux 中任何程序的 CPU 利用率。它提供了一個簡單直觀的命令列介面,允許您限制程序的 CPU 利用率,監視程序的 CPU 利用率,並執行其他高階任務,例如建立 cpuset 和同時控制多個程序的 CPU 利用率。使用 CPUTool,您可以最佳化系統性能,防止過熱,並提高 Linux 系統的整體穩定性。