搬瓦工 VPS 使用 CPULimit 来限制 Linux 进程的 CPU 使用率教程

众所周知,搬瓦工的每台 VPS 都是有 CPU 限制的,如果超出了限制,会被暂停。那么有没有方法对每个进程的 CPU 使用率进行限制呢?有的。对于 Linux VPS 来说,可以使用 CPULimit 这个小工具来对每个进程限制 CPU 使用率,这样就可以很好的避免我们在使用搬瓦工 VPS 的过程中因为超出 CPU 限制而被暂停。当然,这个方法不仅适用于搬瓦工 VPS,对于所有 Linux VPS 都是可以通用的。

本文介绍一下 CPULimit 的安装方法,以及简单的使用教程和进阶一些的使用教程,相信看完之后都可以顺利安装并使用 CPULimit 这个小工具来对不同进程的 CPU 使用率进行限制。

一、CPULimit 简单介绍

Cpulimit 是一个限制进程的 CPU 使用率的工具(以百分比表示,而不是以 CPU 时间表示)。 当您不希望批处理作业占用太多 CPU 周期时,控制批处理作业很有用。 目标是防止进程运行超过指定的时间比率。它不会更改 nice 值或其他调度优先级设置,而是更改真实的 CPU 使用率。 此外,它能够动态且快速地适应整个系统负载。 使用的 CPU 数量的控制是通过向进程发送 SIGSTOP 和 SIGCONT POSIX 信号来完成的。 指定进程的所有子进程和线程将共享相同百分比的 CPU。

搬瓦工 CPU 限制详解:《搬瓦工最大峰值 CPU 和平均 CPU 限制的区别以及 CPU 使用限制详解》。

二、CPULimit 安装方法

CPULimit 并不是系统自带的工具,使用前要先安装。在 Debian 或 Ubuntu 系列的 Linux 中,可以使用 apt 来安装:

sudo apt-get install cpulimit

若在 CentOS、RHEL 或者是 Fedora Linux 中,可在启用 EPEL 套件库后,再以 yum 安装:

sudo yum install cpulimit

或者直接:

sudo yum install epel-release cpulimit

三、CPULimit 使用教程

最好的使用教程就是查看一下帮助命令:

root@hk:~# cpulimit -h
CPUlimit version 2.4
Usage: cpulimit TARGET [OPTIONS...] [-- PROGRAM]
   TARGET must be exactly one of these:
      -p, --pid=N        pid of the process
      -e, --exe=FILE     name of the executable program file
                         The -e option only works when
                         cpulimit is run with admin rights.
      -P, --path=PATH    absolute path name of the
                         executable program file
   OPTIONS
      -b  --background   run in background
      -f  --foreground   launch target process in foreground and wait for it to exit
      -c  --cpu=N        override the detection of CPUs on the machine.
      -l, --limit=N      percentage of cpu allowed from 1 up.
                         Usually 1 - 100, but can be higher
                         on multi-core CPUs (mandatory)
      -m, --monitor-forks  Watch children/forks of the target process
      -q, --quiet        run in quiet mode (only print errors).
      -k, --kill         kill processes going over their limit
                         instead of just throttling them.
      -r, --restore      Restore processes after they have
                         been killed. Works with the -k flag.
      -s, --signal=SIG   Send this signal to the watched process when cpulimit exits.
                         Signal should be specificed as a number or 
                         SIGTERM, SIGCONT, SIGSTOP, etc. SIGCONT is the default.
      -v, --verbose      show control statistics
      -z, --lazy         exit if there is no suitable target process,
                         or if it dies
          --             This is the final CPUlimit option. All following
                         options are for another program we will launch.
      -h, --help         display this help and exit

下面以 md5sum 进程为例,介绍一下基本用法。运行以下命令:

md5sum /dev/urandom

这是一个非常耗 CPU 的进程,这行指令会从 /dev/urandom 读取随机数据,计算其 MD5 检查码,这个指令非常耗费 CPU,而且试算不完的,若要中止此进程,请按下 Ctrl + c。

注意:不要长时间运行此命令,仅教学使用,不然可能你的搬瓦工 VPS 不知不觉就被暂停了。

在这行 md5sum 指令执行之后,我们可以使用 top 指令查看目前系统的状况,此时 md5sum 的 CPU 用量应该会接近 100%,如图所示。

如果想要让这个 md5sum 进程不要吃掉太多的 CPU 资源,可以使用 cpulimit 来限制其 CPU 用量(需先在 top 里查看进程的 PID,然后另开一个终端操作):

cpulimit --pid 11699 --limit 50

执行之后,该进程的 CPU 用量就会被控制在 50% 左右,如下图所示(因为我重新运行了一下,所以 PID 变了,不然是不会变的)。

另外也可以使用进程名称来限制 CPU 使用量:

cpulimit --exe md5sum --limit 50

或者以绝对路径来限制 CPU 使用量,可以避免不同进程有相同进程名的问题:

cpulimit --path /usr/bin/md5sum --limit 50

如果在进程执行前就已经确定要调整 CPU 用量,也可以直接以 cpulimit 来执行进程,例如:

cpulimit --limit 50 -- md5sum /dev/urandom

最后,如果想要停止刚刚已经限制的进程,那么需要通过 top 查找 PID 然后 kill

kill -9 PID

好像没看到更优雅的结束进程的方式。

四、CPULimit 进阶用法

1、后台运行

cpulimit 在执行时也会占用一个终端机,若想让 cpulimit 在后台运行,可加上 --background 参数:

cpulimit --pid 21203 --limit 50 --background

2、终止 CPU 用量过高的进程

cpulimit 配合 --limit 参数可以限制进程的 CPU 用量上限值,如果进程超过这个上限值,预设会调节 CPU 用量,而如果想要在 CPU 用量过高时直接中止进程,可以加上 –-kill 参数:

cpulimit --pid 21203 --limit 50 --kill

3、自动离开

在默认的状况下,cpulimit 在执行时若没有发现指定的进程(或是指定的进程已经中止了),它还是会持续等待并监控系统的进程,只要有发现符合条件的进程,就会继续进行 CPU 用量的控制。

若想让 cpulimit 在找不到目标进程时自动离开,可以加上 --lazy 参数:

cpulimit --exe md5sum --limit 50 --lazy

4、实用范例

在撰写 bash 脚本时,我们可以先执行一个进程,紧接着从 bash 的 $! 变量读取出前一个执行进程的 PID,这样就可以不需要手动查出进程的 PID 了:

# 运行进程
md5sum /dev/urandom &

# 限制上一个进程的 CPU 用量
cpulimit --pid $! --limit 50

以上就是 cpulimit 这个小工具的一些基础用法和进阶用法,希望对大家有所帮助。

本文主要参考以下两篇文章:

  • https://blog.gtwang.org/linux/limit-cpu-usage-of-a-process-in-linux-with-cpulimit-tool/
  • https://cloud.tencent.com/developer/article/1626179

搬瓦工 CPU 限制详解:《搬瓦工最大峰值 CPU 和平均 CPU 限制的区别以及 CPU 使用限制详解》。

相关文章:

五、搬瓦工推荐套餐和新手教程

1、搬瓦工推荐方案

搬瓦工实时库存:https://stock.bwg.net

CN2 (入门)
$49.99
年付
  • 1核 CPU
  • 1GB 内存
  • 20GB SSD 硬盘
  • 1000GB 月流量
  • 1Gbps 带宽
  • DC3/DC8 机房
  • $49.99/年
  • 入门首选,速度够用
HK (高端)
$89.99
月付
  • 2核 CPU
  • 2GB 内存
  • 40GB SSD 硬盘
  • 500GB 月流量
  • 1Gbps 带宽
  • 香港 CN2 GIA 机房
  • $89.99/月,$899.99/年
  • 土豪高端选择,绝对好用
方案内存CPU硬盘流量/月带宽机房价格购买
CN2
(最便宜)
1GB1核20GB1TB1GbpsDC3 CN2
DC8 ZNET
$49.99/年购买
CN22GB1核40GB2TB1Gbps$52.99/半年
$99.99/年
购买
CN2 GIA-E
(最推荐)
1GB2核20GB1TB2.5GbpsDC6 CN2 GIA-E
DC9 CN2 GIA
日本软银 JPOS_1
联通荷兰 EUNL_9
$49.99/季度
$169.99/年
购买
CN2 GIA-E2GB3核40GB2TB2.5Gbps$89.99/季度
$299.99/年
购买
HK2GB2核40GB0.5TB1Gbps香港 CN2 GIA$89.99/月
$899.99/年
购买
HK4GB4核80GB1TB1Gbps$155.99/月
$1559.99/年
购买

选择建议:

  • 入门:洛杉矶 CN2 套餐,目前最便宜,可选 CN2 GT 机房,入门之选。
  • 推荐:洛杉矶 CN2 GIA-E 套餐,价格适中,速度超快,可选机房多,性价比最高。
  • 高端:香港 CN2 GIA 套餐,价格较高,但是无可挑剔。

2、搬瓦工新手教程

  1. 搬瓦工新手入门:《搬瓦工新手入门完全指南:方案推荐、机房选择、优惠码和购买教程(推荐阅读)
  2. 搬瓦工购买教程:《2021 年最新搬瓦工购买教程和支付宝支付教程
  3. 搬瓦工优惠码:BWH3HYATVBJW
  4. 搬瓦工补货通知:《欢迎订阅搬瓦工补货通知(补货提醒)/ 加入搬瓦工交流群
  5. 搬瓦工方案推荐:《搬瓦工高性价比 VPS 推荐:目前哪款方案最值得买?
  6. 搬瓦工有货方案:《搬瓦工目前可购买便宜方案整理
  7. 搬瓦工演示站点:《搬瓦工演示站点汇总(SpeedTest 速度测试 + LookingGlass 路由测试)
  8. 搬瓦工测试 IP:《搬瓦工所有数据中心测试 IP
  9. 搬瓦工测评汇总:《搬瓦工所有机房数据中心速度、性能、延迟等测评信息汇总
  10. 搬瓦工 KiwiVM:《搬瓦工 BandwagonHost KiwiVM 面板后台功能整理和使用教程

未经允许不得转载:Bandwagonhost中文网 » 搬瓦工 VPS 使用 CPULimit 来限制 Linux 进程的 CPU 使用率教程