如何限制Linux中进程的CPU使用情况
有时,特定过程可能会消耗更多的CPU使用率,并影响整个系统的性能。
由于该特定过程消耗了更多CPU,因此我们无法执行其他任务。
在开始新任务之前,我们需要等待该过程完成。
幸运的是,现在可以通过称为CPULIMIT的有用实用程序来解决。
顾名思义,CPULIMIT限制了进程的CPU使用率。
控制批处理作业时,这非常有用,当我们不希望它们使用更多CPU使用率时。
CPULIMIT的主要目标是防止进程运行超过指定的时间比。
它不会改变漂亮的值或者其他调度优先级设置,而是真正的CPU使用率。
此外,它能够动态快速地调整到整个系统负载的自身。
它将适用于大多数UNIX的分布。
在此简要教程中,我们将看到如何限制Linux中的进程的CPU使用情况。
安装CPULIMIT.
CPULIMIT可在大多数UNIX的分发的默认存储库上使用。
我们可以在相应的Linux发行版中使用默认包管理器安装它,如下所示。
关于Arch Linux及其衍生品:
$sudo pacman -S cpulimit
在Debian,Ubuntu,Linux Mint:
$sudo apt-get install cpulimit
关于Rhel,Centos,Fedora:
首先启用EPEL存储库。
$sudo yum install epel-release
然后,使用命令安装cpuclimit:
$sudo yum install cpulimit
或者,
$sudo dnf install cpulimit
在SUSE/OpenSUSE上:
$sudo zypper install cpulimit
使用cpulimit限制Linux中进程的CPU使用情况
让我们运行一个消耗更多CPU使用率的程序。
以下命令应以root用户身份运行。
创建一个名为highcpu.sh的文件。
$vi highcpu.sh
添加以下内容。
#!/bin/bash while :; do :; done;
按ESC键和类型:WQ保存并关闭文件。
此短程将无休止地循环并消耗最大CPU使用率。
因此,我建议我们在虚拟机中测试它。
使此文件可执行文件:
$chmod +x highcpu.sh
然后,使用命令运行后台中的进程:
$./highcpu.sh &
示例输出:
[1] 2331
这里2331是上述过程的PID。
要查看它消耗的CPU,请使用"TOP"命令。
$top
示例输出:
top - 17:16:34 up 10 min, 2 users, load average: 1.12, 0.53, 0.26 Tasks: 87 total, 4 running, 83 sleeping, 0 stopped, 0 zombie %Cpu(s): 91.9 us, 2.7 sy, 5.4 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 630108 total, 274868 free, 85904 used, 269336 buff/cache KiB Swap: 1343484 total, 1343484 free, 0 used. 428172 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2331 root 20 0 113120 1184 1004 R 97.7 0.2 2:40.91 highcpu.sh 2412 root 39 19 244516 11020 4496 R 1.3 1.7 0:00.11 dnf 10 root 20 0 0 0 0 S 0.3 0.0 0:00.68 rcu_sched 1 root 20 0 43900 6480 3900 S 0.0 1.0 0:01.61 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.06 ksoftirqd/0 6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u2:0 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0 11 root 20 0 0 0 0 R 0.0 0.0 0:00.38 rcuos/0 12 root rt 0 0 0 0 S 0.0 0.0 0:00.02 watchdog/0 13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf 17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeb
在上面的输出中看到,Highcpu.sh进程消耗超过97%的CPU使用率。
由于它消耗了更多的CPU使用率,因此运行其他任务是很难的。
几分钟后,系统可能会挂起或者冻结。
这是CPULIMT有帮助的地方。
现在,让我们使用CPULIMIT工具限制此过程的CPU使用情况。
例如,我们将通过PID限制此过程至30%CPU。
为此,运行:
$cpulimit -l 30 -p 2331 &
其中
- "-l 30"标志将过程限制在30%。
- "-p 2331"是highcpu.sh的pid
现在,让我们再次使用命令检查上述进程的CPU使用情况:
$top
示例输出:
top - 17:29:16 up 5 min, 1 user, load average: 0.61, 0.57, 0.27 Tasks: 86 total, 2 running, 83 sleeping, 1 stopped, 0 zombie %Cpu(s): 7.2 us, 0.0 sy, 0.0 ni, 92.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 630108 total, 435348 free, 78052 used, 116708 buff/cache KiB Swap: 1343484 total, 1343484 free, 0 used. 442040 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2331 root 20 0 113120 1180 1004 T 29.7 0.2 3:36.97 highcpu.sh 2334 root 9 -11 4324 692 572 S 1.7 0.1 0:00.47 cpulimit 1 root 20 0 43900 6480 3900 S 0.3 1.0 0:01.65 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 6 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kworker/u2:0 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0 10 root 20 0 0 0 0 S 0.0 0.0 0:00.44 rcu_sched 11 root 20 0 0 0 0 R 0.0 0.0 0:00.37 rcuos/0 12 root rt 0 0 0 0 S 0.0 0.0 0:00.05 watchdog/0 13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf
如上所述,在上述输出中,HIGHCPU.sh的CPU使用量已降至29.7%,这非常接近30%。
现在,我们可以使用更多CPU资源自由运行其他进程。
我们已经看到了如何通过PID来限制一个过程。
或者,我们可以通过指定可执行程序文件的名称来运行上述命令。
例如,上述命令将是:
$cpulimit -l 30 ./highcpu.sh &
同样,我们可以在背景中启动任何数字流程并根据需要限制其CPU使用率。
我们可以使用"FG"命令随时将在后台运行的进程进行前景:
$fg
示例输出:
cpulimit -l 30 -p 2331