CPUTool - 限制和控制 Linux 中任何进程的 CPU 利用率

linuxoperating systemopen source更新于 2026/1/29 3:37:17

CPU 利用率是决定系统性能的重要因素。当系统上运行多个进程时,CPU 可能会过载,从而导致系统性能下降甚至崩溃。为了避免这种情况,控制和限制各个进程的 CPU 利用率至关重要。

CPUTool 是一个命令行工具,可让您限制和控制 Linux 系统上运行的任何进程的 CPU 利用率。它通过设置进程的 CPU 亲和性和优先级来工作,允许您将特定百分比的 CPU 处理能力分配给特定进程。

在本文中,我们将讨论如何安装和使用 CPUTool 来限制和控制 Linux 中任何进程的 CPU 利用率。

安装 CPUTool

大多数 Linux 发行版的软件仓库中都包含 CPUTool。您可以使用发行版的软件包管理器安装 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,这意味着它可以利用 100% 的 CPU 处理能力。

要限制进程的 CPU 利用率,您需要降低其 CPU 份额。例如,如果您想将 ID 为 1234 的进程的 CPU 利用率限制为 50%,可以运行以下命令 -

sudo cpuset -p 1234 -u 512

这将为 ID 为 1234 的进程分配 50% 的 CPU 处理能力。您还可以通过指定要分配给进程的 CPU 核心来设置进程的 CPU 亲和性。例如,如果您只想为 ID 为 1234 的进程分配 CPU 核心 0 和 1,可以运行以下命令 -

sudo cpuset -p 1234 -l 0,1

这将只为 ID 为 1234 的进程分配 CPU 核心 0 和 1。

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 服务文件,方法是使用文本编辑器(例如 nano)打开该文件,命令为 sudo nano /etc/systemd/system/myprocess.service。在此文件中,您应该添加进程的单元描述和服务详细信息,包括启用 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 系统的整体稳定性。


相关文章


有用资源