Linux排查Load过高问题

情况1:CPU高、Load高

  1. 通过top命令查找占用CPU最高的进程PID;
  2. 通过top -Hp PID查找占用CPU最高的线程TID;
  3. 对于java程序,使用jstack打印线程堆栈信息;
  4. 通过printf %x tid打印出最消耗CPU线程的十六进制;
  5. 在堆栈信息中查看该线程的堆栈信息;

情况2:CPU低、Load高

  1. 通过top命令查看CPU等待IO时间,即%wa;
  2. 通过iostat -d -x -m 1 10查看磁盘IO情况;(安装命令 yum install -y sysstat)
  3. 通过sar -n DEV 1 10查看网络IO情况;
  4. 通过如下命令查找占用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