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"

 

相关文章:

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、什么是JVM  JVMJava Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。  Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。二、JVM的组成我们先把JVM这个虚拟机画出来,如下图所示:从这张图中我们可以看出,JVM是运行在操作系统之上的,它与硬件没有直接的交互,我们再来看JVM由哪些部分组成,如下图所示:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值