CPU性能篇
负载判断
- 使用CPU进程:%user %sys
CPU百分比: top(平均百分比) mapstat(每个CPU以及平均百分比)
具体进程:pidstat
- 等待CPU进程:%wait
CPU百分比:vmstat 依据就绪队列长度来判断
具体进程:pidstat (%wait)
- 不可中断进程: %iowait
CPU百分比: top(平均百分比) mapstat(每个CPU以及平均百分比)
具体进程:
命令汇总
- top
CPU使用率:它是用户态和内核态 CPU 使用率的总和,包括进程用户空间使用的 CPU、通过系统调用执行的内核空间 CPU 、以及在就绪队列等待运行的 CPU。在虚拟化环境中,它还包括了运行虚拟机占用的 CPU。更细粒度的用pidstat
- mpstat
是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标
mpstat -P ALL 5 查看 CPU 使用率的:-P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据
%user 用户态的CPU时间(%),不包含nice值为负进程 (usr/total)*100 CPU密集性
%nice nice值为负进程的CPU时间(%) (nice/total)*100
%sys 内核时间(%) (system/total)*100
%iowait 硬盘IO等待时间(%) (iowait/total)*100 IO密集型的此值会很高
%irq 硬中断时间(%) (irq/total)*100
%soft 软中断时间(%) (softirq/total)*100
%idle CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%) (idle/total)*100
- pidstat
是一个常用的进程性能分析工具,用来实时查看进程的 CPU使用率、内存、I/O 以及上下文切换等性能指标
pidstat 5 1 确认那个进程导致了 CPU 使用率高,间隔5秒后输出一组数据,输出两次
用户态 CPU 使用率 (%usr);
内核态 CPU 使用率(%system);
运行虚拟机 CPU 使用率(%guest);
等待 CPU 使用率(%wait);源码或者RPM升级到11.5.5版本以后就可以看到了
以及总的 CPU 使用率(%CPU)。
-w:显示每个进程的上下文切换情况 pidstat -w 5 1
-t:显示选择任务的线程的统计信息外的额外信息
pidstat -wt 1 参数表示输出线程的上下文切换指标
cswch:自愿上下文切换表示每秒自愿上下文切换(voluntary context switches)的次数,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。自愿上下文切换变多了,说明进程都在等待资源,有可能发生了 I/O 等其他问题
nvcswch:非自愿上下文切换,表示每秒非自愿上下文切换(non voluntary context switches)的次数。则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。非自愿上下文切换变多了,说明进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈
- stress
是一个 Linux 系统压力测试工具
stress --cpu 1 --timeout 600 模拟一个 CPU 使用率 100% 的场景
stress -i 1 --timeout 600 模拟 I/O 压力
stress -c 8 --timeout 600 模拟的是 8 个进程
- vmstat
观察CPU上下文切换情况。是个汇总。要想看某个进程的CPU使用率,要结合pidstat -wt 1来看
vmstat 1
cs(context switch)是每秒上下文切换的次数。
in(interrupt)则是每秒中断的次数。
r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。若大于CPU核数,就会发生大量CPU竞争
b(Blocked)则是处于不可中断睡眠状态的进程数。