CPUTool - 限制和控制 Linux 中任何进程的 CPU 使用率
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
这会将 50% 的 CPU 处理能力分配给 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 的任务文件来将进程移至 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利用率。为此,您需要为“系统”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 文件,将 CPU 份额分配给用户的 cpuset。例如,要将 100 个 CPU 份额分配给 user_name cpuset,请运行以下命令 -
sudo echo "100" > /sys/fs/cgroup/cpu/user_name/cpu.shares
将用户进程移至CPUset -
通过将用户的所有进程的进程 ID 写入 cpuset 的任务文件,将用户的所有进程移至新创建的 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 | 将进程移动到 cpuset。 sudo tee /sys/fs/cgroup/cpuset/myprocess/tasks > /dev/null。这会将进程移至 cpuset,并根据分配给 cpuset 的 CPU 份额限制其 CPU 利用率。
通过执行以下步骤,您可以使用 CPUTool 和 Systemd 有效限制 Linux 中一个进程或一组进程的 CPU 利用率。
结论
CPUTool 是一个功能强大的工具,使您能够控制 Linux 中任何进程的 CPU 利用率。它提供了一个简单直观的命令行界面,允许您限制进程的 CPU 利用率、监视进程的 CPU 利用率以及执行其他高级任务,例如创建 cpuset 和同时控制多个进程的 CPU 利用率。使用 CPUTool,您可以优化系统性能、防止过热并提高 Linux 系统的整体稳定性。