如何在Linux中限制进程的CPU使用率

  • 如何在Linux中限制进程的CPU使用率已关闭评论
  • 685 views
  • A+
所属分类:linux

如何在Linux中限制进程的CPU使用率

有时,特定进程可能会消耗更多的CPU使用量,并影响整个系统的性能。由于该特定进程消耗更多CPU,因此您无法执行其他任务。在开始新任务之前,您需要等待该过程完成。幸运的是,现在可以通过名为CPULimit的有用实用程序来解决这个问题。顾名思义,CPULimit限制了进程的CPU使用率。当您不希望它们消耗更多CPU使用时,这对于控制批处理作业非常有用。

CPULimit的主要目标是防止进程运行超过指定的时间比率。它不会更改nice值或其他调度优先级设置,而是更改实际的CPU使用率。此外,它能够动态,快速地适应整个系统负载。它适用于大多数类似Unix的发行版。在本简要指南中,我们将了解如何限制Linux中进程的CPU使用率。

使用CPULimit在Linux中限制进程的CPU使用率

安装CPULimit

CPULimit可用于大多数类Unix发行版的默认存储库。您可以使用相应Linux发行版中的默认包管理器来安装它,如下所示。

在Arch Linux及其衍生产品上:

$ sudo pacman -S cpulimit

On Debian, Ubuntu, Linux Mint:

$ sudo apt-get install cpulimit

On RHEL, CentOS, Fedora:

首先启用EPEL。

$ sudo yum install epel-release

然后,使用命令安装cpuclimit:

$ sudo yum install cpulimit

或者,

$ sudo dnf install cpulimit

On SUSE/openSUSE:

$ sudo zypper install cpulimit

用法

让我们运行一个消耗更多CPU使用率的程序。以root用户身份运行以下命令。

创建一个名为highcpu.sh的文件  。

$ vi highcpu.sh

添加以下内容。

#!/bin/bash
while :; do :; done;

这个简短的程序将无休止地循环并消耗最大的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进程占用的CPU使用率超过97%。由于它消耗了更多的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

结论

在运行消耗更多CPU使用率的进程时,CPULimit非常有用。下次如果您注意到程序消耗更多的CPU使用率,只需使用“top”命令找到进程的PID,并使用CPULimit命令将其CPU使用率限制为最小值,如上所述。您还可以使用此应用程序来测试应用程序在低CPU使用率下的执行情况。

资源: 

  • 安卓客户端下载
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar