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)
iftop使用查看流量(traffic)
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"
相关文章:
- JAVA虚拟机-JMM内存模型(六)
JAVA虚拟机-JVM性能调优(五)
JAVA虚拟机-G1 Heap Structure(四)
JAVA虚拟机-CMS Heap Structure(三)
JAVA虚拟机-GC介绍和垃圾算法理解(二)
JAVA虚拟机-Java体系结构及hotspot介绍(一)
相关推荐
lxttiger 2020-08-18
一支菜鸟 2020-07-27
ChenRuiyz 2020-07-26
pbaabc 2020-07-23
liufangbaishi0 2020-07-18
一支菜鸟 2020-07-06
jvm 2020-07-04
dushine00 2020-06-21
zhouxihua0 2020-06-13
星愿心愿 2020-11-24
ruancw 2020-11-10
VFCSDN 2020-10-14
somyjun 2020-09-29
longjing 2020-09-18
KINGJENSEN 2020-09-14
85251846 2020-09-14
周公周金桥 2020-09-06
ARMOTO机器人 2020-08-18
atb 2020-08-17