原文:linux_LoadAverageLoadAverage平均负载是指单位时间内系统中处于运行状态和不可中断状态的平均进程数。与CPU使用率没有直接关系。一般进程需要消耗CPU、内存、磁盘I/O、网络I/O等资源。在这种情况下,平均负载并不仅仅指CPU使用率。即内存、磁盘、网络等因素也会影响系统的平均负载值。但影响最大的是CPU使用率、CPU等待和磁盘I/O。他不仅包括正在使用CPU的进程,还包括等待CPU和等待磁盘I/O的进程。查看loadaverage#cat/proc/loadavg#top#uptime#wtop为例:这里的loadaverage三个值分别是指系统最近1/5/15分钟内的平均负载值。如何理解loadaverageCPU负载理解为通道的负载。对于单车道:如果路上车不多,车道未满,则load<1;如果车道已满,则负载=1;如果车道外还有车在等,load>1;需要注意的是,load=1并不是说CPU不能工作,只是表示它在满负荷运行,比如现实生活中的例子,车道满了,但是车流还是可以有序的走先。简单来说,“排队”和“处理”的案例分析使用了以下工具:stress:Linux系统压力测试工具,这里我们将其作为一个异常进程来模拟平均负载增加的场景。sysstat:用于监控和分析系统性能的Linux性能工具。在以下情况下,将使用该软件包的两个命令mpstat和pidstat。mpstat:常用的多核CPU性能分析工具,用于实时查看各个CPU的性能指标,以及所有CPU的平均指标。pidstat:常用的进程性能分析工具,用于实时查看进程的CPU、内存、I/O、上下文切换等性能指标。场景1:CPU密集型进程,单进程终端运行stree命令模拟CPU使用率100%场景stress--cpu1--timeout600终端2,查看CPU负载uptime上升状态#或watch-n1uptimeTerminal3,查看CPU使用情况mpstat-PALL5Terminal4,哪个进程导致CPU使用率100%呢?使用pidstat查询pidstat-u51,分析结果如下图:图1:压力模拟测试图2:uptime结果负载率依次增加,但不超过1,因为只有一个线程此时正在执行,并且任务队列中只有1个任务(不考虑操作系统的其他任务)。图3:核心入住率达到100%。图4:占100%的进程名称为stress(但进程id3269与图1不同,不知为何,多次测试关系为+1)。场景二:I/O密集型进程,单个进程的基本命令与上述类似。不同的是1号终端的测试压力命令stress-i1--timeout3600如下图所示。需要注意的是图3和图4,都反映了iowait是系统的瓶颈。场景三:进程数量多的场景,多个进程终端一:使用stress模拟24个进程stress-c24--timeout3600结果如下图2:loadavg,增加很大,说明systemloadishigh图4:多个进程的iowait值过高,说明此时io时间很可能是瓶颈资源。故障排除不能简单地用负载值来判断CPU负载。应该结合CPU使用率、进程状态、负载值综合判断。负载飙升一般有三种情况:1.CPU使用率高,负载值高,有状态为R的进程,这是网上大部分文章提到的情况。这时候说明任务是CPU密集型的等待cpu,这种情况下cpu负载高。2、cpu使用率不高,负载值高,有状态为D的进程,此时进程状态为D,说明任务是IO密集型任务,正在等待IO。在这种情况下,请检查io设备。3、cpu使用率高,负载值高,系统中有R态和D态的进程。在这种情况下,很难判断CPU负载。但是,如果有任务处于D状态,则表示IO操作被阻塞。注意IO设备的情况;检查D状态进程问题后需要判断cpu负载;粗略的看下图是有效的(粗看的原因是cpu使用率和loadAVG没有必然关系,但是这张图两者之间的关系是成立的)。状态为R,表示正在运行,或者在运行队列中,可以调度运行。状态为D,表示不间断睡眠。这个状态是不可中断的,不管是kill,kill-9,还是kill-15。D状态的进程通常是在等待IO,比如磁盘IO,网络IO,以及其他外围IO。如果长时间处于D状态,说明IO设备本身可能有故障。其他注意事项什么样的进程会被计入负载?R和D(不间断睡眠)之外的进程状态。处于D状态的进程并不常见。他们在等待IO的时候会处于这个状态。一般来说,处于这种状态的时间很短。如果我们看到大量进程处于D状态,此时CPU占用率可能不是很高,说明IO遇到了瓶颈或者IO设备有问题;iowait高多少一般iowait达到30%就认为高了,需要注意。使用:iostat-x110其中,如果%util达到70%,则磁盘IO非常频繁,需要引起注意。细分loadaverage查看loadavg,由于cpu任务队列(cpucompetitionqueuing)的贡献和IO任务队列(IOcompetitionqueuing)的贡献。vmstat是常用的系统性能分析工具,主要用于分析系统的内存使用情况,也常用于分析CPU上下文切换次数和中断次数。##每3秒输出一组数据,输出一次vmstat31其中:r(running或runnable)是就绪队列的长度,即正在运行并等待CPU的进程数。b(blocked)处于不可中断睡眠状态的进程数。另外:cs(contextswitch):每秒上下文切换的次数。in(interrupt):每秒的中断次数。vmstat只给出了系统整体的上下文切换情况。如果想查看每个进程的详细信息,可以使用pidstat。其中:cswch表示每秒资源上下文切换(voluntarycontextswitches)的次数。自愿上下文切换是指进程无法获取所需资源而导致的上下文切换。例如,当I/O和内存等系统资源不足时,会发生自愿上下文切换。nvcswch表示每秒非自愿上下文切换的次数。非资源上下文切换是指由于时间片已过等原因,被系统强制调度的进程的上下文切换。例如,当有大量进程在争夺CPU时,很容易发生非自愿的上下文切换。资源上下文切换较多,说明进程在等待资源,可能已经出现I/O等其他问题。非自愿的上下文切换较多,这意味着进程正在被强制调度,即它们都在竞争CPU。说明cpu是瓶颈。中断次数增加了,说明CPU被中断处理程序占用了。需要查看/proc/interrupts文件来分析具体的终端类型。pidstat命令在使用pidstat定位问题时,经常会用到以下命令:pidstat-u1pidstat-r1pidstat-d1以上命令以1秒为信息采集周期,获取CPU、内存、内存的统计信息磁盘输入输出。例7:pidstat-Tpidstat-TTASKpidstat-TCHILDpidstat-TALLTASK表示上报独立任务。CHILD关键字表示报告进程下的所有线程统计信息。ALL表示上报独立任务和任务下的所有线程。注意:任务和子线程的全局统计与pidstat选项无关。这些统计信息不会对应当前的统计间隔,只有在子线程被杀死或完成时才会收集这些统计信息。mpstat命令mpstat统计信息来自/proc/stat文件。mpstat命令主要用于检查多CPU系统中各个CPU的负载是否均衡。处理器统计信息,而vmstat显示所有处理器的统计信息。因此,编写糟糕的应用程序(未使用多线程体系结构)可能会在多处理器机器上运行而无需使用所有处理器。这会导致一个CPU过载而其他CPU空闲。使用mpstat可以轻松诊断这些类型的问题。2、vmstat中所有关于CPU的总结都适用于mpstat。当您看到较低的%idle数字时,您就知道您的CPU耗尽了。当您看到很高的%iowait数字时,您就知道I/O子系统在当前负载下有问题。3、一般来说,nice值应该在-20~19范围内,默认为0。nice值越小,进程的优先级越高。只有root用户可以设置一个很好的负值(以增加进程优先级)。参考这篇文章让你全面了解LoadAverage(负载):https://www.sohu.com/a/217589...linuxloadaverage的含义:www.zhangblog.com/2019/09/14/linux-load/linux服务器的loadaverage很高,但是cpu和内存还不错。这是怎么回事:https://segmentfault.com/q/10...正确使用loadaverage的姿势:https://blog.csdn.net/zqz_zqz...Linux性能优化:https://zhuanlan。zhihu.com/p/...进程实时监控pidstat命令详解:https://www.cnblogs.com/mulul...pidstat命令详解(转载):https://www.cnblogs.com/wx170...linuxmpstat命令用法详解:https://blog.csdn.net/wangqua...linux硬中断与软中断:https://zhuanlan.zhihu.com/p/...为什么linux需要用负nice值统计cpu使用率?:https://bbs.csdn.net/topics/3...linux性能分析-mpstat求高手解释?:https://www.zhihu.com/questio...
