前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >系统的load average

系统的load average

原创
作者头像
程哲
发布2021-12-10 00:25:22
5390
发布2021-12-10 00:25:22
举报
文章被收录于专栏:ikubernetesikubernetes

系统的平均负载是指单位时间内,系统处于可运行状态和不可中断状态的进程数

可运行状态进程:可以理解为系统内正在占用CPU或正在等待CPU的进程,也就是处于R状态的进程

不可中断的进程:一般表示正处于内核关键流程的进程,不可被中断,最常见的如等待磁盘IO的进程,也就是系统内常见的D进程(disk sleep),不可中断是因为此时正在读写磁盘IO,中断会导致进程内数据与磁盘内数据产生差异(等待IO并不占用CPU的使用率,因此平均负载高并不表示CPU使用率高,有可能CPU使用率并不高,而是等待IO)

1个CPU在同一时间只能执行一个进程的代码(多个进程同时运行是利用了CPU的时间分片机制,会产生上下文切换,损耗CPU性能),实际上CPU同一时间只能运行1个进程

比如:服务器上有2核心的CPU,通过 uptime 查看发现1分钟内平均负载为1,表示1分钟内有1个核心的CPU是一直处于工作状态或不可中断状态,同时另外1个核心的CPU是空闲的,2核心的CPU平均负载达到2,表示CPU工作饱和,此时如果再增加进程运行,会出现等待CPU的现象(通过 pidstat 查看时会看到进程的 %wait 值增加,表示进程等待CPU的时间)

实践:

利用 stress 压测工具验证可运行状态进程,不可中断进程状态时的现象 ubuntu 18.04机型 双核心CPU

1. 安装stress,sysstat工具 (会用到sysstat包的 mpstat,pidstat 工具)

代码语言:javascript
复制
apt-get install stress sysstat -y 

2. 使用uptime查看当前CPU平均负载,并使用stress 压测CPU,等待1分钟再次查询平均负载对比

代码语言:javascript
复制
root@cloud-public:~# uptime    #第一次查询,可以看到1分钟平均负载 0.03 非常低
 00:10:39 up 37 days, 13:36,  1 user,  load average: 0.03, 0.03, 0.00
 
 root@cloud-public:~# stress --cpu 1 --timeout 100    #使用stress工具压测1核心的CPU
stress: info: [12503] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd

root@cloud-public:~# uptime    # 第二次查询,发现平均负载变为 1.05 ,表示有1个核心的CPU 1分钟内处于运行状态
 00:13:32 up 37 days, 13:39,  2 users,  load average: 1.05, 0.49, 0.19
 
root@cloud-public:~# mpstat -P ALL 3   # 使用 mpstat 工具查看所有CPU的使用情况,可以看到有1个CPU使用率为100%
Linux 4.15.0-142-generic (cloud-public) 	12/10/2021 	_x86_64_	(2 CPU)

12:15:36 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
12:15:39 AM  all   50.25    0.00    0.17    0.17    0.00    0.00    0.00    0.00    0.00   49.42
12:15:39 AM    0    0.33    0.00    0.67    0.33    0.00    0.00    0.00    0.00    0.00   98.67
12:15:39 AM    1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

root@cloud-public:~# pidstat -u 5 1    # 通过pidstat 查询进程,可以看到 stress 进程CPU使用率为100%
Linux 4.15.0-142-generic (cloud-public) 	12/10/2021 	_x86_64_	(2 CPU)

12:19:40 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
12:19:45 AM     0      1139    0.20    0.20    0.00    0.00    0.40     1  sunloginclient
12:19:45 AM     0      2341    0.20    0.00    0.00    0.00    0.20     1  barad_agent
12:19:45 AM     0      6034    0.20    0.00    0.00    0.00    0.20     1  tat_agent
12:19:45 AM     0     14426  100.00    0.00    0.00    0.00  100.00     0  stress
12:19:45 AM     0     14470    0.00    0.20    0.00    0.00    0.20     1  pidstat

IO占用型场景的测试: 
   stress -i 1 --timeout 600    #占用一个100%CPU,使用 mpstat工具查看时会看到CPU时间消耗在sys,iowait上
  
大量进程CPU占用场景测试:
  stress -c 8 --timeout 600    #并发8个CPU的进程占用,会发现平均负载为8,但是机器实际CPU为2核心
  因此,通过pidstat 工具查看进程占用CPU时,会发现 %wait 升高,表示进程等待CPU的时间

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档