情况1:CPU高、Load高
- 通过top命令查找占用CPU最高的进程PID;
- 通过top -Hp PID查找占用CPU最高的线程TID;
- 对于java程序,使用jstack打印线程堆栈信息;
- 通过printf %x tid打印出最消耗CPU线程的十六进制;
- 在堆栈信息中查看该线程的堆栈信息;
情况2:CPU低、Load高
- 通过top命令查看CPU等待IO时间,即%wa;
- 通过iostat -d -x -m 1 10查看磁盘IO情况;(安装命令 yum install -y sysstat)
- 通过sar -n DEV 1 10查看网络IO情况;
- 通过如下命令查找占用IO的程序;
ps -e -L h o state,cmd | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr
sar 5 6 //每隔5s 输出6次后退出
16时13分01秒 CPU %user %nice %system %iowait %steal %idle
16时13分06秒 all 9.15 0.00 48.19 0.05 0.00 42.61
16时13分11秒 all 2.13 0.00 8.76 0.08 0.00 89.03
16时13分16秒 all 2.13 0.00 11.41 0.03 0.00 86.44
16时13分21秒 all 2.20 0.00 10.61 0.05 0.00 87.14
16时13分26秒 all 2.48 0.00 10.44 0.08 0.00 87.00
16时13分31秒 all 2.40 0.00 10.51 0.05 0.00 87.00
注:
CPU:all 表示统计信息为所有 CPU 的平均值。
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。
排查实例
一、vmstat选项
-a 显示活跃内存(active)和非活跃内存(inact)
-f 显示从系统启动至今的fork数量
-m 显示slabinfo
-s 静态显示内存相关信息
首先运行一个默认命令, 根据输出结果,解释下各个字段的含义,有助于下面的分析。
[root@master ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 431340 44840 211744 0 0 5 2 149 9 2 4 95 0 0
[root@minion ~]# vmstat -a
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free in