通过vmstat命令看到的cpu四个状态:sy,us,id,wa和procs状态的r(load avg)结合,基本可以知道cpu的负荷情况。
字段含义如下:
理解(Load Average),使用vmstat 查看r 队列
平均负载,上一分钟同时处于“就绪”状态的平均进程数。
Load这个东西怎么理解呢,就像一条马路,有N个车道,如果N个进程进入车道,那么正好一人一个,再多一辆车就占不到车道,要等有一个车空出车道。
Load Average 的值应该小于“CPU个数 * 核数 *0.7 ” ,否则就高了。
比如:
查看 CPU 核心数:cat /proc/cpuinfo|grep processor|wc -l
1个1核CPU,Load Average < 1 * 1 * 0.7 = 0.7;
1个4核的CPU,Load Average必须 < 1 * 4 * 0.7 = 2.8。
理解(Interrupt),使用vmstat查看的 in 次数
Interrupt Rate中包括内核由于进程的时间片中断。
在 Linux 2.6 中,系统时钟每 1 毫秒中断一次时钟频率,用 HZ 单位表示(即每秒中断 1000 次)。
系统不一样,内核不一样的配置100、250的都有。
内核的时钟频率可以通过如下命令知道:
cat /boot/config-`uname -r` | grep ‘^CONFIG_HZ=’
CONFIG_HZ=100
每秒总的时钟中断数就是 = cpu个数 * 核数 * CONFIG_HZ
cat /proc/interrupts 可以查看中断的类型以及次数
理解(Context Switch),使用vmstat查看 cs 次数
中断和进程(包括线程)切换,一次中断(Interrupt)会引起一次切换,进程(线程)的创建、激活之类的也会引起一次切换。
统计CPU 上下文切换,可查看哪个服务在做切换,与切换频率。
pidstat -wt 1 |grep -v 0.00
理解CPU使用率,使用vmstat查看id 空闲率可以判断CPU使用情况,然后通过ps 命令,找到对应的PID信息。
统计业务进程数量、占用CPU前20的进程信息。
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head -20
统计D进程:得不到IO的响应,进程会进入了uninterruptible sleep状态,所以要想使进程从uninterruptible sleep状态恢复,就得使进程等待的IO恢复,D进程太多,一般只能重启操作系统。
ps -aux | awk '$8 == "D"' |wc -l
查看哪个用户启用线程数最多
ps h -Led -o user | sort | uniq -c | sort -n
查看哪个进程启用线程数最多
ps h -Led -o pid | sort | uniq -c | sort -n
ps -Lef |grep -v PID|sort -rn -k +6 |head -1
找到异常线程后,如果是java线程,可以使用jstack 打印堆栈日志,然后通过日志分析哪一段代码有问题!
上一篇:Linux高阶—磁盘性能分析iostat(二)
下一篇:Linux高阶—接口性能分析fiddler(四)