您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

一次限制进程的 CPU 用量的实操过程

时间:2022-11-30 17:41:20  来源:今日头条  作者:嵌入式Linux

给大家分享一个事情。背景是这样的,我们要测试某个第三方 SDK 运行性能,这是个 CPU 密集型的服务。我想评估一下它运行一遍到底有多吃 CPU,以便评估上线后我们需要部署多少台服务器。

我们是在一台 16 物理核的机器上测试的,我们的想法是把它启动起来,然后执行一遍。用耗时乘以 16 核那就是总的 CPU 耗时开销。不过不巧的是我们发现这个货在并发上做的并不是特别好,运行的前半段里只能打满一个核,而后半段可以把整台机器上所有 16 核都打满。这样就没法准确估算它的 CPU 消耗了。

最先我想到的方案是将这个 SDK 进行 numa 绑定。但是 nuam 绑定只能将 cpu 限制在一个 node 上,我的机器上 一个 node 里有 8 个核。问题仍然存在,还是不能精确控制 cpu 的用量。

所以我接着又想到了 cgroup 。假如我能从始至终都限制这个 SDK 只使用一个核,且把一个核全部打满,这样我就能准确地评估它的 CPU 耗时。

说干就干。Cgroup 这玩意儿听起来复杂,没想到用起来那是超级的简单。首先我找到了 cpu,cpuacct 这个 group。在它下面创建一个子 group,一行 mkdir 就能搞定。

# cd /sys/fs/cgroup/cpu,cpuacct
# mkdir test
# cd test

这时候 cgroup 已经在 test 这个目录下帮我们创建好了一些文件,通过修改这些文件可以控制进程的 CPU 消耗的。

# ls -l
total 0
-rw-r--r-- 1 root root 0 Sep 23 11:38 cgroup.procs
-rw-r--r-- 1 root root 0 Sep 23 11:37 cpu.cfs_period_us
-rw-r--r-- 1 root root 0 Sep 23 11:37 cpu.cfs_quota_us
......

为了简便,我们只关注上面几个文件。其中 cfs_period_us 用来配置时间周期长度,cfs_quota_us 用来配置当前 cgroup 在设置的周期长度内所能使用的 CPU 时间。这两个文件配合起来就可以设置 CPU 的使用上限。

比如我想控制我的进程最多只能使用 1 个核,那么就这样。

# echo 500000 > cpu.cfs_quota_us // 500ms 
# echo 500000 > cpu.cfs_period_us // 500ms 

每 500ms 能使用 500ms的 CPU 时间,即将 cpu 使用限制在 1 个核以内。(如果想要限制只用两个核,那就把 cpu.cfs_quota_us 改成 1000000 即可)

这个时候,还缺关键的一步。把要限制的进程加进来。这个也简单,修改 cgroup.procs 把要限制的进程 pid 添加进去就行了。

这里有个细节,那就是加入一个进程后,这个进程创建的子进程都将默认加到这个 cgroup 的限制中。虽然我们不知道我们将要启动的进程的 pid 是多少,但是我们可以查到当前 bash 进程的 pid,只要把它加进来就行了。这样后面通过控制台启动进程的时候,都将自动进入 cgroup 限制中。

# echo $$
16403
sh -c "echo 16403 > cgroup.procs"

这个时候我们使用一个简单的工具 ,stress。用它来模拟开篇 sdk 的 cpu 密集型工作。通过 -c 指定开启几个进程,然后每个进程都反复不停的计算随机数的平方根,尽最大努力消耗 cpu。

# stress -c 4

另外启动一个控制台,观察 cpu 消耗。发现总量确实是控制住了。stress 及其子进程加起来都只使用了 1 核。

 

不过我发现了一个不满意的地方。虽然 cpu 用量是控制住了,但是 cpu 消耗是分散在各个 cpu 核上的,而且还是飘来飘去的。我想要的效果是限制它在某一个核上运行。

 

 

回来查看了一下 cgroup 目录下的文件。猛然看到了一个叫 cpuset 的 group。第六感告诉我,它一定可以!

# ll /sys/fs/cgroup/
total 0
drwxr-xr-x 2 root root  0 Sep 15 17:43 blkio
lrwxrwxrwx 1 root root 11 Sep 15 17:43 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11 Sep 15 17:43 cpuacct -> cpu,cpuacct
drwxr-xr-x 4 root root  0 Sep 15 17:43 cpu,cpuacct
drwxr-xr-x 3 root root  0 Sep 15 17:43 cpuset  // 就是它!
......

于是乎,我先是废弃了刚刚的 test 配置,直接删除即可(rm -rf /sys/fs/cgroup/cpu,cpuacct)。再我搜了一下这个 cpuset 怎么用,开始新的配置。

# cd /sys/fs/cgroup/cpuset
# mkdir test && cd test
# echo "0" > cpuset.cpus //限制在第 0 号核上
# echo 0 > cpuset.mems
# echo $$ > cgroup.procs

继续开始施加 cpu 压力。

# stress -c 4

在另外一个控制台上查看效果。

完美!这次不但将 cpu 用量控制在了一个核,而且也将 CPU 消耗牢牢地钉在了 cpu0 上。这就是我想要的效果!

基于这个方法,我们就非常准确地完成了对那个第三方 sdk 的 cpu 消耗用量的测试。也评估出来未来上线后需要几台服务器。

 

文章链接:
https://mp.weixin.qq.com/s/Y6qY8TKWu_dezeYs_KTqPA

转载自:嵌入式linux

文章来源:开发内功修炼 ,作者张彦飞allen

文章链接:一次限制进程的 CPU 用量的实操过程

版权申明:本文来源于网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。



Tags:进程   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
给大家分享一个事情。背景是这样的,我们要测试某个第三方 SDK 运行性能,这是个 CPU 密集型的服务。我想评估一下它运行一遍到底有多吃 CPU,以便评估上线后我们需要部署多少台服...【详细内容】
2022-11-30  Tags: 进程  点击:(0)  评论:(0)  加入收藏
荣耀手机和华为手机只能通过USB的方式解锁。1,开启手机USB调试模式(不同手机开启方式可以自行百度)荣耀开启方式https://jingyan.baidu.com/article/ac6a9a5e148a536a643eac10....【详细内容】
2022-11-13  Tags: 进程  点击:(33)  评论:(0)  加入收藏
“ 进程、线程有什么区别?虚拟地址和物理地址有什么区别?让我们用一只青蛙的视角,来解读它们背后的秘密”进程、线程、虚拟地址、物理地址,这些名词既熟悉也陌生!似乎无论看多少...【详细内容】
2022-10-08  Tags: 进程  点击:(35)  评论:(0)  加入收藏
秋意渐起,风微凉。本周,冷空气一股接一股来袭,我国秋季版图继续向南扩张,预计到本周末(9月24日至25日),有将近一半国土迈入秋天门槛。中国天气网推出2022最新全国入秋进程图,快来看...【详细内容】
2022-09-23  Tags: 进程  点击:(268)  评论:(0)  加入收藏
内核地址空间分布 直接映射区:线性空间中从3G开始最大896M的区间,为直接内存映射区,该区域的线性地址和物理地址存在线性转换关系:线性地址=3G+物理地址。动态内存映射区:该区...【详细内容】
2022-09-15  Tags: 进程  点击:(70)  评论:(0)  加入收藏
一丶Android多进程通信的应用场景? 保活 webview 加载图片 push推送 与系统服务通信二丶为什么要用binder Android系统内核是Linux内核 Linux内核进程通信有:管道、内存共享、...【详细内容】
2022-09-14  Tags: 进程  点击:(92)  评论:(0)  加入收藏
Windows下:查看端口占用netstat -ano | findstr "端口号" 获取到pid 查看PID对应的进程tasklist | findstr "进程ID" 获取到进程名称...【详细内容】
2022-07-14  Tags: 进程  点击:(83)  评论:(0)  加入收藏
移动通信大约每10年更新一代,每一代都体现了有代表性的技术特色和业务能力。从1978年第一代面向公众服务的移动通信系统诞生,到今天进入5G规模部署的新阶段,不仅全面重塑了人们...【详细内容】
2022-06-23  Tags: 进程  点击:(87)  评论:(0)  加入收藏
相信这不是安卓用户第一次遇到这个问题。 才刚刚从微信上切到其他应用上,就莫名其妙的不会收到微信的信息,回到微信就是一个“蓝色星球”,不愧被称为地球软件。正在激烈的进行...【详细内容】
2022-06-08  Tags: 进程  点击:(689)  评论:(0)  加入收藏
定时结束进程功能说明:实现Windows如何定时关闭一个程序,此处实现定时关闭OPCProxy.exe进程;操作步骤:1、将下边两个文件复制到BJ文件夹内; a、Shut_down.bat的内容为:@echo offT...【详细内容】
2022-05-06  Tags: 进程  点击:(538)  评论:(0)  加入收藏
▌简易百科推荐
给大家分享一个事情。背景是这样的,我们要测试某个第三方 SDK 运行性能,这是个 CPU 密集型的服务。我想评估一下它运行一遍到底有多吃 CPU,以便评估上线后我们需要部署多少台服...【详细内容】
2022-11-30  嵌入式Linux  今日头条  Tags:进程   点击:(0)  评论:(0)  加入收藏
我们在电商平台购物时,下单之后会有一个付款倒计时,如果在规定的时间内未付款,订单就会自动关闭。类似这样的场景还有很多,比如优惠劵到期失效,下单后自动发消息等。今天我们来讨...【详细内容】
2022-11-24  程序员拾山  今日头条  Tags:订单   点击:(6)  评论:(0)  加入收藏
近期收到很多朋友的消息,表示对java后端很感兴趣,但是不知道学习java后端的难度如何,都需要学哪些内容。java后端要学什么不是一两句话能够说清楚的,所以整理了本篇文章,供大家参...【详细内容】
2022-11-24  互联网资讯看板     Tags:java   点击:(10)  评论:(0)  加入收藏
最近几年,微服务拆分大行其道,在业务越来越复杂的情况下,许多业务纷纷抛弃了传统单体架构,拥抱微服务。但随着微服务的拆分结束,大家又发现了新的问题,比如服务间逻辑复杂,运维复杂性变高,微服务架构变得越来越难以管理,最终演...【详细内容】
2022-11-24  闪念基因  今日头条  Tags:DDD编程   点击:(5)  评论:(0)  加入收藏
我们在B站看视频的时候偶然发现当字幕遇到人物的时候就被裁切了,不会挡住人物,是不是觉得特别神奇图源:互联网高端的效果,往往只需要采用最朴素的实现方式,我们打开电脑的F12,一探...【详细内容】
2022-11-24  钱得乐  掘金  Tags:弹幕   点击:(14)  评论:(0)  加入收藏
今天给大家介绍一个JPA的好搭档:QueryDSL。0. 前言相对于 MyBatis ,本人更喜欢 Spring Data JPA ,因为它更符合面向对象的思想,然而 JPA 对复杂的查询支持较弱,常见的有两种方式:...【详细内容】
2022-11-21  二哥学Java  今日头条  Tags:QueryDSL   点击:(21)  评论:(0)  加入收藏
云原生是当下IT圈非常热门的一个词,其目的是为了各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生包含很多技术,比如容器、微服务、DevOps...【详细内容】
2022-11-21  华为云开发者联盟    Tags:持续交付   点击:(12)  评论:(0)  加入收藏
大家好,我是Echa.今天来分享 Github 上 8 个很棒的 React 项目,希望能通过学习这些项目的源码,帮助大家更好地理解 React,编写更优雅的 React 代码!概览: React Tetris: 俄罗斯方...【详细内容】
2022-11-20  Echa攻城狮  今日头条  Tags:React   点击:(23)  评论:(0)  加入收藏
引言VHDL编程语言语法内容很多很杂,包括用于编程的规定、用于仿真的规定以及用于描述的规定。对于刚刚接触VHDL语言的设计者而言,拿到厚厚的VHDL编程语言书籍,往往有无从下手感...【详细内容】
2022-11-17  newpowerleader  今日头条  Tags:VHDL   点击:(38)  评论:(0)  加入收藏
OKHttpUtil在Java的世界中,Http客户端之前一直是Apache家的HttpClient占据主导,但是由于此包较为庞大,API又比较难用,因此并不使用很多场景。而新兴的OkHttp、Jodd-http固然好用...【详细内容】
2022-11-16  JAVA我要发大财  今日头条  Tags:OkHttp   点击:(30)  评论:(0)  加入收藏
站内最新
站内热门
站内头条