惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
L
LINUX DO - 最新话题
P
Proofpoint News Feed
Cyberwarzone
Cyberwarzone
Know Your Adversary
Know Your Adversary
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
L
Lohrmann on Cybersecurity
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy & Cybersecurity Law Blog
K
Kaspersky official blog
The Last Watchdog
The Last Watchdog
Webroot Blog
Webroot Blog
Scott Helme
Scott Helme
T
Threat Research - Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
WordPress大学
WordPress大学
L
LINUX DO - 热门话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
V
Visual Studio Blog
O
OpenAI News
AI
AI
Hacker News: Ask HN
Hacker News: Ask HN
V2EX - 技术
V2EX - 技术
GbyAI
GbyAI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Simon Willison's Weblog
Simon Willison's Weblog
S
Schneier on Security
Spread Privacy
Spread Privacy
Y
Y Combinator Blog
I
InfoQ
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
F
Fortinet All Blogs
C
CERT Recently Published Vulnerability Notes
T
The Blog of Author Tim Ferriss
C
Check Point Blog
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
N
News and Events Feed by Topic
Project Zero
Project Zero
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
B
Blog
G
Google Developers Blog

kekxv 技术日志

基于 kekxv/gitea-pages 与 Gitea Actions 构建静态站点托管服务 Json简单工具 在Windows上运行Code Server:结合WSL打造你的云端VS Code开发环境 安卓sdkmanager工具换源 boost bazel starter bazel 供应商模式 PVE引导丢失修复 NSFW图像检测 警惕c++内置变量指针 关于内网springboot启动慢记录 网页转换为chrome插件 nginx代理的一种使用方式 YOLOv8 训练自己的数据 luckfox-交叉编译之bazel gitea actions CICD 自动化 影音中心Jellyfin快速部署 OCR & 人脸算法 -- opencv dnn tensorflow gpu 安装(ubuntu22.04) 深度学习记录-简单
Linux限制进程使用率
kekxv · 2023-07-20 · via kekxv 技术日志

在使用服务器的时候,有些情况下我们需要对进程进行资源限制,例如限制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资源限制的方法不只有一种,各位可以根据实际的情况,选择适合自己的方式。