继 33节 2020-09-25cpu使用率分析(一)下 ,今天我们继续来讲解:
开始新知识前,我们先来做个小总结。通过前面几节的学习,我们发现关于cpu性能指标比较多,cpu性能分析工具也比较多,那么实际的工作场景里,主要关注哪些指标呢?选择哪些工具快捷的定位问题呢?
(1)cpu关注的性能指标
第一个想到的就是cpu使用率,这也是实际性能场景中最常见的一个指标:cpu使用率。
根据cpu上运行任务就的不同将cpu使用率划分如下:
用户态cpu使用率:表示cpu在用户态运行时间占用百分比,此值高,表明应用程序占用比较高。
系统态cpu使用率:表示cpu在内核态运行时间的占用百分比。内核态cpu使用率高,说明内核态比较繁忙。比如开启大量
进程(cpu密集型)就会导致内核态升高(因为负载过高,容易出现进程上下文切换或者硬中断,而
上下文切换或者硬中断需要系统调度,所以内核态升高)。
等待i/o的cpu使用率:通常也称为iowait,表示等待i/o的时间百分比,iowait使用率高,说明系统与硬件设备的i/o交互时间
比较长。
软中断和硬中断的cpu使用率: 表示内核调用软中断处理程序的时间占用百分比。硬中断处理程序的时
间占用百分比,通常说明系统发生了大量的中断。
第二个: 平均负载(load average)
平均负载是系统的平均活跃进程数。
它反应了系统的整体负载i情况,主要包括三个数值,分别是过去1分钟,过去5分钟,15分钟。
平均负载大于逻辑cpu个数,就表示负载过大了。
第三个:进程上下文切换
上下文切换分为:自愿和非自愿
自愿上下文切换:无法获取自愿而导致的
非自愿上下文切换:被系统强制调度。
(2)性能分析工具:
掌握cpu的性能指标,那么还需要知道,怎么去获取这些指标,也就是工具怎么使用。
首先(第一个):平均负载负载的案例,先用uptime,查看系统的平均负载,而在平均负载升高之后,又用mpstat和pidstat,分别观察cpu和每个进程cpu的使用情况,进一步找出了导致平均负载升高的进程,也就是我们的压测工具stres。
其次(第二个)是上下文切换:先用vmstat查询系统的上下文切换次数和中断次数。
然后通过pidstat,查看进程的自愿上下文切换和非自愿上下文切换;
最后通过pidstat -t ,观察线程的上下文切换情况,找出上下文切换次数增多的根源是基准测试工具sysbench。
最后(第三个)是java进程的cpu使用率升高。先从jmeter的聚合报告查看到tps变小,响应时间变大开始,排除网络瓶颈后再使用top命令查看服务器资源使用情况----》可以看到是java进程导致的。再查看相应的线程占用情况,通过线程id定位到相应的线程栈的状态情况,最后通过jstack命令定位到是哪个包下面哪个类哪一行代码导致的性能问题