0%

Linux限制进程使用率

在使用服务器的时候,有些情况下我们需要对进程进行资源限制,例如限制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使用率,取值范围为0100,表示限制的百分比<pid>表示要限制的进程的进程ID

例如,要将进程ID1234的进程的CPU使用率限制为50%,可以运行以下命令:

1
cpulimit -l 50 -p 1234

cpulimit命令会不断检查被限制进程的CPU使用情况,并根据设定的限制值动态调整进程的CPU使用率。

请注意,使用cpulimit命令需要具有足够的权限(通常需要以root用户或具有sudo权限运行)。另外,cpulimit命令只能限制进程的CPU使用率,并不能限制其使用的其他系统资源,如内存磁盘

测试使用

我们可以测试wc命令,看看正常情况的效果:

1
2
3
# 限制 wc 进程 50% 的 CPU 使用率
cpulimit -l 50 -e wc
# 将会输出 Warning: no target process found. Waiting for it...

然后我们新开shell,执行wc 命令,此时将会如下输出:

1
2
3
root@server:~# cpulimit -l 50 -e wc
Warning: no target process found. Waiting for it...
Process 29943 detected

则表示命令正常,可以进行实际控制。

使用示例

有时候我们需要将内网机器暴露到互联网上,供自己测试,这个时候我们可以考虑内网穿透工具,例如 nps 工具,但是这个工具在某种特殊情况下,他会将CPU占满,此时我们就需要对他进行限制。

限制的方式有两种,一种是使用docker启动,使用dockerdeploy.resources方案进行限制。

另一种则是我们这里提到的cpulimit方式进行限制;

首先我们可以用一些方式,将nps启动:自建服务的方式,或者nps start方式启动。

然后我们启动命令测试:

1
2
# 限制 nps 进程 20% 的 CPU 使用率
cpulimit -l 20 -e nps

如果输出Process 29943 detected则表示操作正常,此时可以结束当前进程,然后将cpulimit注册为服务,可以参考 systemd 简单编写 :

/usr/lib/systemd/system/cpulimit-nps.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=nps资源控制服务
After=network.target

[Service]
User=root
Restart=on-failure
WorkingDirectory=/root/
ExecStart=/usr/bin/cpulimit -l 20 -e nps

[Install]
WantedBy=multi-user.target

然后我们便可以启动服务:systemctl start cpulimit-nps ,然后通过systemctl status cpulimit-nps查看服务情况,
同时可以选择:systemctl enable cpulimit-nps设置为开机启动。

结语

进行CPU资源限制的方法不只有一种,各位可以根据实际的情况,选择适合自己的方式。