1. 首先,最容易想到的是CPU使用率,也是实际环境中最常见的一个性能指标
CPU使用率是非空闲时间占总CPU时间的百分比,根据CPU上运行任务的不同,又被分为用户CPU,系统CPU,等待I/O CPU,软中断和硬中断
用户CPU使用率:包括用户态CPU使用率(user)和低优先级用户态CPU使用率(nice),表示CPU在用户态运行的时间百分比,用户CPU使用率高,通常说明:应用程序比较繁忙
系统CPU使用率:表示CPU在内核态运行的时间百分比(不包括中断),系统CPU使用率高,说明内核比较繁忙
等待I/O的CPU使用率:通常也成为iowait,表示等待I/O的时间百分比,iowait高,通常说明系统与硬件设备的I/O交互时间比较长
软中断和硬中断的CPU使用率:分别表示内核调用软中断处理程序,硬中断处理程序时间百分比,使用率高,通常说明系统发生了大量的中断
2. 第二个,应该是平均负载(Load Average),也就是系统的平均活跃进程数,它反映了系统的整体负载情况,主要包括三个数值:1分钟,5分钟,15分钟的平均负载
理想情况下是:平均负载等于逻辑CPU的个数,这表示每个CPU都刚好被充分利用,如果平均负载大于逻辑CPU个数,就表示负载比较大
3. 第三个,进程上下文切换,进程上下文切换分为无法获取资源导致的自愿上下文切换和被系统强制调度导致的非自愿上下文切换
1. 首先,平均负载的案例,先用uptime,查看了系统的平均负载,而在平均负载升高后,又用mpstat和pidstat,分别观察了每个CPU和每个进程CPU的使用情况,进而找出了导致平均负载升高的过程,也就是我们的性能压测工具:stress
2. 第二个:上下文切换的案例,先用vmstat,查看了系统的上下文切换次数和中断次数,然后通过pidstat,观察了进程的自愿上下文切换和非自愿上下文切换情况,最后通过pidstat,观察了线程的上下文切换情况,找到了上下文切换测试增多的根源,也就是我们的性能测试工具:sysbench
3. 第三个:java进程CPU使用率升高,我们先用top,查看了系统进程的使用情况,然后发现CPU使用率升高的进程Tomcat,也就是java应用,再查看相应的线程占用CPU很高,通过tid找到对应线程栈的状态,导致了老年代内存溢出
通过上面描述,我们发现每个场景的性能工具都不一样,这么多的工具要怎么区分和选择?
活学活用,把性能指标和性能工具联系起来:
第一个维度:从CPU的性能指标出发,也就是说,当你要查看某个性能指标时,要清楚知道哪些工具可以做到
性能指标 | 工具 | 说明 |
平均负载 | uptime |
uptime最简单 top提供了更全的指标 |
系统整体CPU使用率 |
vmstat mpstat top sar /proc/stat |
top,vmstat,mpstat只可以动态查看,而sar还可以记录历史数据
/proc/stat,是其他性能工具的数据来源 |
进程CPU使用率 |
top pidstat ps htop atop |
top和ps可以按CPU使用率给进程排序,而pidstat只显示实际用了CPU的进程 htop和atop以不同颜色显示更直观 |
系统上下文切换 | vmstat | 除了上下文切换次数,还提供运行状态和不可中断状态进程的数量 |
软中断 |
top /proc/softirqs mpstat |
top提供软中断CPU使用率,而/proc/softirqs和mpstat提供了各种软中断在 每个CPU的运行次数 |
硬中断 | vmstat |
提供总的中断次数
|
网络 |
dstat sar tcpdump |
dstat和sar提供总的网络接收和发送情况,tcpdump是动态抓取正在进行的 网络通讯 |
I/O |
dstat sar |
dstat和sar都提供了I/O的整体情况 |
CPU个数 |
/proc/cpuinfo lscpu |
lscpu更直观 |
事件剖析 | perf | perf可以用来分析CPU的缓存以及内核调用链 |
第二个维度:从工具出发,如何快速分析CPU的性能瓶颈?
性能工具 | CPU性能指标 |
uptime | 平均负载 |
top | 平均负载,运行队列,整体的CPU使用率以及每个进程的状态和CPU使用率 |
htop | top增强版,以不同的颜色区分不同类型的进程,更直观 |
atop | CPU,内存,磁盘和网络等各种资源的全面监控 |
vmstat | 系统整体的CPU使用率,上下文切换次数,中断次数,包括处于运行和不可中断状态的进程数量 |
mpstat | 每个CPU的使用率和软中断次数 |
pidstat | 进程和线程的CPU使用率,中断上下文切换次数 |
/proc/softirqs | 软中断类型和每个CPU上的累计中断次数 |
perf | CPU性能事件剖析,如调用链分析,CPU缓存,CPU调度 |
所以要弄清楚每个性能指标的关联性,要知道每种指标的工作原理:比如用户CPU使用率很高,我们应该去排查进程的用户态而不是内核态,因为用户CPU使用率反映的就是用户态的CPU使用情况,而内核态的CPU使用情况只会反映到系统CPU使用率上
我们为了缩小排查范围,通常会先运行几个支持指标较多的工具:top,vmstat,pidstat
通过这张图发现,top,vmstat,pidstat这三个命令,几乎包含了所有重要的CPU性能指标,比如:
从top的输出可以得到各种CPU使用率以及平均负载等信息
从vmstat的输出可以得到上下文切换次数,中断次数,运行状态和不可中断的进程数
从pidstat的输出可以得到进程的用户CPU使用率,系统CPU使用率以及自愿上下文切换和非自愿上下文切换
另外:这三个工具输出的很多指标是相互关联的,所以用箭头连起来
原文:https://www.cnblogs.com/my_captain/p/12676144.html