2023年7月3日发(作者:)
linux_负载分析之LoadAverage原创:平均负载是指单位时间内,系统处于可运⾏状态和不可中断状态的平均进程数。和 CPU 使⽤率并没有直接的关系⼀般的进程需要消耗 CPU、内存、磁盘I/O、⽹络I/O等资源,在这种情况下,平均负载就不是单独指的CPU使⽤情况。即内存、磁盘、⽹络等因素也可以影响系统的平均负载值。不过影响最⼤的是 CPU 使⽤率、CPU 等待和磁盘I/O。他不仅包扩了正在使⽤CPU的进程,还包括等待 CPU 和等待磁盘I/O的进程。查看load average# cat /proc/loadavg
# top
# uptime
# wtop为例:这⾥的 load average 的三个值分别指系统在最后 1/5/15 分钟 的平均负载值。如何理解load average将CPU负载理解为车道的负载,对单车道⽽⾔:如果路⾯上的车不多,没有占满车道,那么load < 1;如果占满了车道,load = 1;如果车道外⾯还有车在等待,load > 1;需要注意的是,load = 1 不代表CPU⽆法⼯作了,这只是表⽰满负荷运⾏,例如实际⽣活中的例⼦,车道占满了,但是车流还能有序前进。简单来说就是:“排队中的”除”正在处理中的”案例分析使⽤如下⼯具:stress:Linux 系统压⼒测试⼯具,这⾥我们⽤作异常进程模拟平均负载升⾼的场景。sysstat:Linux 性能⼯具,⽤来监控和分析系统的性能,以下案例中会⽤到这个包的 2 个命令 mpstat 和 pidstat。mpstat:常⽤的多核 CPU 性能分析⼯具,⽤来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。pidstat:常⽤的进程性能分析⼯具,⽤来实时查看进程的 CPU、内存、I/O 以及上下⽂切换等性能指标场景1:CPU密集型进程,单个进程终端⼀运⾏ stree 命令,模拟⼀个 CPU 使⽤率 100% 的场景stress --cpu 1 --timeout 600终端⼆,查看 CPU 负载的上升状态uptime# or watch -n 1 uptime终端三,查看 CPU 使⽤状态mpstat -P ALL 5
终端四,哪个进程导致了 CPU 使⽤率为 100% 呢? 使⽤ pidstat 查询 pidstat -u 5 1如下图结果结果分析:图1:stress模拟测试图2:uptime结果的负载率依次增加,但是并未超过1,原因是此时只有1个线程执⾏,任务队列中也只有1个任务(暂不考虑操作系统的其他任务)。图3:有个核占⽤率达到100%了。图4:占⽤100%的进程名称是stress(但是进程id3269和图1的不同,这个不清楚为何,测试多次都是+1的关系)。场景2:I/O 密集型进程,单个进程基本命令和上⾯类似差别在于终端1的测试stress命令stress -i 1 --timeout 3600如下图结果需要关注的是图3和图4,都体现了iowait是系统瓶颈。场景3:⼤量进程的场景,多个进程终端⼀:使⽤ stress 模拟 24 个进程stress -c 24 --timeout 3600结果如下图2:loadavg,⼤幅增加,说明系统负载偏⾼图4:多个进程的iowait取值偏⼤,说明io时间此时⼤概率是瓶颈资源故障排除不能单纯以load值来判断cpu的负载,要结合cpu的使⽤率、进程的状态和load值来综合判断。load飙⾼⼀般有三种情况:使⽤率⾼,load值⾼,有状态为R的进程 这就是⽹上⼤部分⽂章提到的情况,此时,说明任务都是cpu密集型的,都在等待着cpu,这种情况下说明cpu负载很⾼。使⽤率不⾼,load值⾼,有状态为D的进程 这种情况会发现进程状态为D,说明任务为IO密集型的任务,都在等待IO,这种情况下要检查io设备。使⽤率⾼,load值⾼,系统中既有R状态⼜有D状态的进程 这种情况就不好判断cpu负载了,但是存在D状态的任务,就说明IO操作出现了阻塞,要关注⼀下IO设备情况了;cpu负载需要排查了D状态进程问题后再去判断;粗略来看,下图是成⽴的(之所以说粗略看,因为cpu使⽤率和loadAVG并⽆必然关系,但这个图中将⼆者建⽴关系了)。状态为R,表⽰正在运⾏,或者处于运⾏队列,可以被调度运⾏。状态为D,表⽰ uninterruptible sleep,这种状态是不可中断的,⽆论是kill,kill -9,还是kill -15。处于D状态的进程通常是在等待IO,⽐如磁盘 IO,⽹络 IO,其他外设 IO。如果处于D状态的时间较长,意味着可能是IO设备本⾝出了故障。其他注意事项什么样的进程会被统计到load⾥?进程状态出于R和D(不可中断睡眠)。D状态的进程不常见,等待IO的时候会处于这个状态,⼀般情况下这个状态时间⾮常短,如果我们看到⼤量的D状态的进程,这个时候cpu的使⽤率未必很⾼,说明IO遇到瓶颈或IO设备出现了问题;iowait多少算⾼⼀般 iowait 达 30% 就算⾼了,需要关注。使⽤:iostat -x 1 10其中如果 %util 到 70%,那么磁盘IO 就很频繁了,需要重点关注。细分load average查看loadavg中,由于cpu任务队列贡献(cpu竞争排队)和IO任务队列贡献(IO竞争排队)。vmstat是⼀个常⽤的系统性能分析⼯具,主要⽤来分析系统的内存使⽤情况,也常⽤来分析CPU上下⽂切换和中断的次数。## 每隔3秒输出⼀组数据,输出⼀次vmstat 3 1其中:r(running or runnable)就是就绪队列的长度,也就是正在运⾏和等待CPU的进程数。b(blocked)处于不可中断睡眠状态的进程数。此外:cs(context switch):每秒上下⽂切换的次数。in(interrupt):每秒中断的次数。vmstat只给出了系统总体的上下⽂切换情况,想要查看每隔进程的详细情况,可以使⽤pidstat。其中:cswch表⽰每秒资源上下⽂切换(voluntary context switches)的次数⾃愿上下⽂切换,是指进程⽆法获取所需资源,导致的上下⽂切换。⽐如,I/O、内存等系统资源不⾜时,就会发⽣⾃愿上下⽂切换。nvcswch表⽰每秒⾮⾃愿上下⽂切换(non voluntary context switches)的次数。⾮资源上下⽂切换,是指进程由于时间⽚已到等原因,被系统强制调度,进程发⽣的上下⽂切换。⽐如说,⼤量进程都在争抢CPU时候,就容易发⽣⾮⾃愿上下⽂切换。资源上下⽂切换变多了,说明进程都在等待资源,有可能发⽣了I/O等其他问题⾮⾃愿上下⽂切换变多了,说明进程都在被强制调度,也就是都在争抢CPU。说明cpu是瓶颈。中断次数变多了,说明cpu被中断处理程序占⽤,需要通过查看/proc/interrupts⽂件来分析具体的终端类型pidstat命令使⽤pidstat进⾏问题定位时,以下命令常被⽤到:pidstat -u 1pidstat -r 1pidstat -d 1以上命令以1秒为信息采集周期,分别获取cpu、内存和磁盘IO的统计信息。⽰例七:pidstat -Tpidstat -T TASKpidstat -T CHILDpidstat -T ALLTASK表⽰报告独⽴的task。CHILD关键字表⽰报告进程下所有线程统计信息。ALL表⽰报告独⽴的task和task下⾯的所有线程。注意:task和⼦线程的全局的统计信息和pidstat选项⽆关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在⼦线程kill或者完成的时候才会被收集。mpstat命令mpstat的统计信息来⾃/proc/stat⽂件mpstat命令主要⽤来查看多CPU系统中每个CPU的负载是否均衡输出各参数含义:Note:和mpstat 命令的差别:mpstat 可以显⽰每个处理器的统计,⽽ vmstat 显⽰所有处理器的统计。因此,编写糟糕的应⽤程序(不使⽤多线程体系结构)可能会运⾏在⼀个多处理器机器上,⽽不使⽤所有处理器。从⽽导致⼀个 CPU 过载,⽽其他 CPU 却很空闲。通过 mpstat 可以轻松诊断这些类型的问题。中所有关于CPU的总结都适合mpstat。当您看到较低的 %idle 数字时,您知道出现了 CPU 不⾜的问题。当您看到较⾼的%iowait 数字时,您知道在当前负载下 I/O ⼦系统出现了某些问题。3,⼀般来说nice值应该是在-20~19的范围 默认是0。nice值越⼩ 进程的优先度越⾼ 只有root⽤户才可以设置nice负值(提⾼进程优先度)参考
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688330444a121291.html
评论列表(0条)