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 系统的整体稳定性。