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