什么是平均负载平均负载对于我们来说可能很熟悉但又很陌生,但是我们问平均负载是什么,大多数人的回答是平均负载不就是单位时间内的CPU使用率吗?事实上,情况并非如此。如果可以,您可以通过manuptime找出平均负载的详细信息。简单的说,平均负载是指单位时间内系统处于可运行、不可中断状态的平均进程数,即平均活跃进程数,与CPU使用率没有直接关系。这是可运行和不可中断的术语的解释。可运行状态:指正在使用CPU或等待CPU的进程。我们使用ps命令查看R态进程的不可中断状态:进程就是处于内核态关键进程的进程,这些进程是不可中断的。例如:常见的是等待硬件设备I/O的响应,即我们可以在ps命令中查看D状态的进程。例如,一个进程在磁盘上读写数据时,为了保证数据的一致性,在得到磁盘回复之前,不能被其他进程打断或打断。此时进程处于不可中断状态。如果此时中断进程,很容易出现磁盘数据和进程数据不一致的情况。因此,不可中断状态实际上是一种对系统进程和硬件设备的保护机制。所以,你可以简单的理解为loadaverage就是平均活跃进程数。平均活跃进程数直观上理解为单位时间内的活跃进程数,但实际上是活跃进程数的指数衰减平均值。由于是平均活跃进程数,理想状态是每个CPU上正好有一个进程在运行,这样每个CPU都会得到充分利用。例如,当平均负载为2时,这意味着什么?在只有2个CPU的系统上,这意味着所有的CPU正好被完全占用。在有4个CPU的系统上,这意味着CPU有50%空闲,在只有1个CPU的系统上,这意味着一半的CPU是空闲的。闲置的。进程无法竞争CPU平均负载和CPU使用率在实际工作中,我们经常会混淆平均负载和CPU使用率,所以在这里,我也做一个划分。您可能想知道,既然平均负载代表活动进程数,那么平均负载高是否意味着CPU使用率高?我们还是要回到平均负载的意义。平均负载是指单位时间内处于可运行状态和不可中断状态的进程数。因此,它不仅包括正常使用CPU的进程,还包括等待CPU和等待I/O的进程。CPU使用率是单位时间内CPU繁忙情况的统计,不一定对应平均负载。例如,对于CPU密集型进程,使用大量CPU会导致平均负载增加。这时候,两人是一致的。对于I/O密集型进程,等待I/O也会增加平均负载,但CPU使用率不一定高Loadaveragecase这里需要安装几个工具sysstat,stress,stress-ng这里是sysstat版本Centos的会有点老,最好升级到最新版本。手动rpm安装或源码安装场景一.CPU密集型1.运行stress命令模拟100%CPU使用场景。$stress--cpu1--timeout6002。打开第二个终端和uptime查看平均负载的变化$watch-duptime09:40:35up80days,18:41,2users,loadaverage:1.62,1.10,0.873打开第三个终端mpstat查看CPU使用率变化$mpstat-PALL52010:06:37AMCPU%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle10:06:42AMall31.500.000.350.000.000.000.000.000.0068.1510:06:42AM01.200.0000.8.000.000.000.000.0098.0010:06:42AM17.210.000.400.000。000.000.000.000.0092.3810:06:42AM2100.000.000.000.000.000.000.000.000.0010:06:42AM317.430.000.200.000.000.000.0082.36#PALL代表所有CPU的监控一次输出数据。从第二个终端,我们可以看到1分钟平均负载增加到1.62。从第三个终端可以看到有CPU使用率100%,但是iowait为0,说明平均负载正式增加了。由于CPU使用率是100%,让我们看看是哪个进程导致CPU使用率达到100%。我们可以使用pidstat查看:#每5秒输出一次数据$pidstat-u5110:08:41AMUIDPID%usr%system%guest%wait%CPPUCPUCommand10:08:46AM010.200.000.000.000.200systemd10:08:46AM05990.001.000.000.201。000systemd-journal10:08:46AM010430.600.000.000.000.600rsyslogd10:08:46AM06863100.000.000.000.00100.003stress10:08:46AM073030.200.200.000.000.402pidstat从这里我们可以看出压力进程是造成场景2.I/O密集型进程1.我们使用stress-ng命令,不过这次是为了模拟I/O压力,都不停的执行sync:#--hdd表示读写临时文件#-i生成几个worker循环调用sync()产生io压力$stress-ng-i4--hdd1--timeout6002,打开第二个终端运行uptime查看平均负载$watch-duptime10:30:57up98days,19:39,3users,loadaverage:1.71,0.75,0.693,打开第三个终端运行mpstat查看CPU使用$mpstat-PALL52010:32:09AMCPU%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle10:32:14AMall6.800.0033.7526.160.000.390.000.000.0032.9010:32:14AM04.030.0069。5719.910.000.000.000.000.00014AM320.009.490.000.950.950.000.0064.2410:32:14AM20.240.0010.8763.040.480.000.0025.3610:32:14am31.420.00314.280.00.0047.16increasedto1.71,andthesystemCPUusagefor其中一个CPU升至63.04。这说明loadaverage的增加是因为iowait的增加。那么我们使用pidstat来查看:$pidstat-u51Average:UIDPID%usr%system%guest%wait%CPUCPUCommandAverage:010.000.190.000.000.19-systemdAverage:0100.000.190.001.560.19-rcu_sched.70.5:05090.5392.33-systemd-journalAverage:010430.190.190.000.000.39-rsyslogdAverage:069340.001.560.001.171.56-kworker/2:0-events_power_efficientAverage:073830.000.390.000.780.39-kworker/1:0-events_power_efficientAverage:094110.000.190.000.580.19-kworker/0:0-eventsaverver:096620.0097.670.000.1997.67-Kworker/u8:0+flush-253:0aververy:0107930.000.970.001.560.560.97-kwerter0110630.001.950.001.361.95-压力-ng-ioAverage:0110640.002.720.000.392.72-stress-ng-ioAverage:0110650.001.360.001.751.36-stress-ng-ioAverage:0110672-ng-stress-stress-ng-ioAverage:01106702-stress-ng-ioAverage:01106702-stress-ng-ioAverage:01106702-stress-ng-ioAverageio可以发现是stress-ng导致的场景3.大量进程的场景当系统中正在运行的进程超过了CPU的运行能力时,t这里将是等待CPU的进程。例如:我们使用stress,但是这次我们模拟8个进程:$stress-c8--timeout600我们的系统只有4个CPU。这时候我们需要运行8个进程,显然是不够的。系统CPU严重超载。当时负载值达到4个多点:$uptime10:56:22up98days,20:05,3users,loadaverage:4.52,2.82,2.67然后我们运行pidstat查看进程:$pidstat-u51Linux5.0.5-1.el7.elrepo.x86_64(k8s-m1)07/11/2019_x86_64_(4CPU)10:57:33AMUIDPID%usr%system%guest%wait%CPUCPUCommand10:57:38AM010.200.000.000.000.201systemd10:57:38AM050.920...992systemd-journal10:57:38AM010430.600.200.000.000.791rsyslogd10:57:38AM01292751.590.000.0048.2151.590stress10:57:38AM01292844.640.000.0054.9644.640stress10:57:38AM01292945.440.000.0054.5645.442stress10:57:38AM01293045.440.000.0054.3745.442stress10:57:38AM01293151.590.000.0048.2151.593stress10:57:38AM01293248.410.000.0051.1948.411stress10:57:38AM01293345.240.000.0054.3745.243stress10:57:38AM01293448.810.000.0050.9948.811stress10:57:38AM0130830.000.400.000.200.400pidstat显示8个进程占用4个CPU,每个进程等待CPU时间(%wait)达到50%。这些进程超出了CPU的计算能力,最终导致CPU过载。【小编推荐】如何释放UbuntuLinux/boot分区的空间?27款提升开发幸福感的VsCode插件。为Linuxcp和mv命令添加进度条。Windows10下Hadoop和Hive开发环境的建坑指南。高性能开发的“十大武器”,我爱了!【责任编辑:张艳妮电话:(010)68476606】
