在使用服务器的时候,有些情况下我们需要对进程进行资源限制,例如限制CPU
使用率,使用docker
的时候,可以使用deploy.resources.cpus
进行限制,而当没有使用docker
的时候呢,我们可以考虑使用cpulimit
进行限制
准备
首先我们需要检查系统是否有cpulimit
命令:
1 | which cpulimit |
如果提示 :
1 | cpulimit not found |
则表示没有,需要进行安装,ubuntu
/debian
系列安装方式为:
1 | apt install cpulimit |
其他系统请自行查资料,一般情况下yum
包管理可以直接使用yum install cpulimit
进行安装。
cpulimit 说明
cpulimit
是一个用于限制进程CPU
使用率的命令行工具。它可以让你控制一个正在运行的进程使用的CPU
资源量,从而避免某个进程占用过多的CPU
资源导致系统变慢或负载过高。
cpulimit
的使用方式如下:
1 | cpulimit -l <limit> -p <pid> |
其中,<limit>
表示需要限制的CPU
使用率,取值范围为0
到100
,表示限制的百分比。<pid>
表示要限制的进程的进程ID
。
例如,要将进程ID
为1234
的进程的CPU
使用率限制为50%
,可以运行以下命令:
1 | cpulimit -l 50 -p 1234 |
cpulimit
命令会不断检查被限制进程的CPU
使用情况,并根据设定的限制值动态调整进程的CPU使用率。
请注意,使用cpulimit
命令需要具有足够的权限(通常需要以root
用户或具有sudo
权限运行)。另外,cpulimit
命令只能限制进程的CPU
使用率,并不能限制其使用的其他系统资源,如内存或磁盘。
测试使用
我们可以测试wc
命令,看看正常情况的效果:
1 | 限制 wc 进程 50% 的 CPU 使用率 |
然后我们新开shell
,执行wc
命令,此时将会如下输出:
1 | root@server:~# cpulimit -l 50 -e wc |
则表示命令正常,可以进行实际控制。
使用示例
有时候我们需要将内网机器暴露到互联网上,供自己测试,这个时候我们可以考虑内网穿透工具,例如 nps 工具,但是这个工具在某种特殊情况下,他会将CPU
占满,此时我们就需要对他进行限制。
限制的方式有两种,一种是使用docker
启动,使用docker
的deploy.resources
方案进行限制。
另一种则是我们这里提到的cpulimit
方式进行限制;
首先我们可以用一些方式,将nps
启动:自建服务的方式,或者nps start
方式启动。
然后我们启动命令测试:
1 | 限制 nps 进程 20% 的 CPU 使用率 |
如果输出Process 29943 detected
则表示操作正常,此时可以结束当前进程,然后将cpulimit
注册为服务,可以参考 systemd 简单编写 :
/usr/lib/systemd/system/cpulimit-nps.service
1 | [Unit] |
然后我们便可以启动服务:systemctl start cpulimit-nps
,然后通过systemctl status cpulimit-nps
查看服务情况,
同时可以选择:systemctl enable cpulimit-nps
设置为开机启动。
结语
进行CPU
资源限制的方法不只有一种,各位可以根据实际的情况,选择适合自己的方式。