jvm性能分析和故障解决工具

我们写的java程序需要在jvm上运行,可能出现内存泄漏,死循环,内存溢出,死循环,死锁,当发生这些事情的时候,我们就需要借助jdk的工具。

 

jdk的bin目录下有很多工具

例如

javac.exe 编辑java文件的

java.exe 来执行.class文件的

javap.exe 是反编译.class文件的

jar.exe是用来打jar包的

 

将jdk的lib下的tools.jar 解压,然后在sun/tools下可以看到与bin目录下的工具名称一样的目录,这里面放的就是上面工具的源码,编译之后就可以运行了

我们jdk8学习这些命令

jps的作用

常见的命令参数有:

jps -v

jstat 命令

jstat -gc

如果不指定 间隔和次数,默认只会打印一次

 

 

jstat -class

jstat -compiler

 

gc命令的详细分析

jstat -gc

01064341885 酒仙桥电话
S0C S1C 表示的是:堆内存中幸存区域的大小
S0U S1U 表示的是:堆内存中幸存区的使用大小
EC 表示的是:伊甸园区的内存大小
EU 表示的是:伊甸园区的使用内存
OC 表示的是:老年代的容量
OU 表示的是:老年代的使用状态

(其中MC和MU 在jdk1.8中使用,即对于方法区的方案用的是:元空间,在jdk1.7中叫做永久代的大小)
MC 表示的是:元空间的大小
MU 表示的是:元空间的使用大小
CCSC 表示的是:类压缩空间的容量
CCSU 表示的是:类压缩空间使用的大小
YGC 表示的是: young gc的次数
YGCT 表示的是: young gc 用的时间

FGC:表示的是:Full gc 的次数
FGCT: 表示的是:Full gc 用的时间

GCT 表示的是: 所有gc用的时间

 

main方法中执行到数组第三次垃圾回收

jmp命令:

jmap -heap pid

分析:

jhat命令

 

点开:

jstack命令:

jstack -F pid

jstack -l

写一个死循环代码,我们借助process explorer来查看cpu的使用情况

我们看到对应的Threads中6160(对应的十六进制是:1810) 的占用cpu占用的比较高:

我们根据进程id即java.exe 的进程id,利用 jstack -l 命令来查看该进程的所有线程信息,我们找到线程id是1810

下面是获取外部资源(例如需要输入,即卡顿长时间没有响应)利用jstack来进行分析

利用jstack来演示死锁:

可视化工具jconsole:

在terminal 中直接输入jconsole 就可以看到图形化界面了

虚拟机的配置信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章