JAVA虚拟机-JVM性能调优(五)

系统故障排查方法

 

1.操做系统层面:

 

1.1.cpu使用率太高
   1). us高(用户程序忙,死循环等),
   2).sy高(内核忙,线程多,写入繁忙等)
   3).wio高(写入量过大等) 像redis,es,memcache,mq之类中间件 读写频繁,wio值相对较大
1.2. 内存,主要看内存剩余量,是否发生swap
1.3. io繁忙,iostat, iotop诊断出那个程序在写文件,若是这些写入是必须的,写这些文件是否存在随机写,有无使用缓冲等。
1.4. 网络流量大,连接过多,too open manyfiles,是否接口响应慢致使的,不然是否该增长更多服务器。
  •  经常使用命令:top/free/vmstat/iostat
  •  经常使用工具:tsar,iftop 

tsar使用:(tsar --cpu/--mem/--tcp/--traffic)java

 iftop使用查看流量(traffic)ios

 

 

2.应用程序JVM层面

 

2.1 线程有没有死锁,特色是某些业务接口慢或没响应,其他接口正常(jstack分析) 2.2 cpu某个核使用率持续处于高水平,多是死循环致使 (jstack分析) 2.3 load不高,cpu使用率不高,多是频繁gc致使 (jstat jmap分析) 
  •  经常使用命令  jstat/jmap/jstack/jinfo

 

系统故障时,可利用脚本快速输出当前jvm快照:
PID:当前java进程ID

以下:
echo -e "Dumping the jdump ...\c"
jstack $PID > $DATE_DIR/jstack-$PID.dump 2>&1     //输出 jvm的堆栈快照
echo -e ".\c"
jinfo $PID > $DATE_DIR/jinfo-$PID.dump 2>&1       //输出 JVM的类加载,配置等信息
echo -e ".\c"
jstat -gcutil $PID > $DATE_DIR/jstat-gcutil-$PID.dump 2>&1  //输出当前gc的使用状况
echo -e ".\c"
jstat -gccapacity $PID > $DATE_DIR/jstat-gccapacity-$PID.dump 2>&1 //输出当前gc的空间使用率
echo -e ".\c"
jmap $PID > $DATE_DIR/jmap-$PID.dump 2>&1        //
echo -e ".\c"
jmap -heap $PID > $DATE_DIR/jmap-heap-$PID.dump 2>&1   //输出当前 堆中各个代使用状况
echo -e ".\c"
jmap -histo $PID > $DATE_DIR/jmap-histo-$PID.dump 2>&1 //输出当前 堆中存活的对象(最好top一下前20或30)
echo -e ".\c"

 

相关文章:redis