编程语言
首页 > 编程语言> > Java 虚拟机性能分析工具

Java 虚拟机性能分析工具

作者:互联网

这两天看了下Java虚拟机性能分析相关的东西,做一下总结,主要是jconsole和jvisualvm这两个工具,在java的jdk/bin里面都内置了

 

jconsole

分为本地连接和远程连接,我的不知道为啥本地连接连不上,所以用了远程连接,在idea运行的VM Option里面添加了如下参数

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8011
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

注意里面有个

-Dcom.sun.management.jmxremote.port=8011

就是端口开放在8011,这样我们点击远程连接,输入localhost:8081就能登录了

比较重要的是内存和线程两个栏

MarkSweeP是老年代的GC,Scanvage是young GC,也可点击右上角按钮实现手动GC

 

线程栏里面记录的是首先是线程状态,比如RUNNABLE,(锁上的)WAITING,下面就是堆栈跟踪,也就是显示了当前线程是由哪些方法调用的堆栈,下面有个检测死锁的功能,可以检查程序有没有死锁,后面介绍的jvisulalvm能够自动检测,相对上更方便一点

 

jvisualvm

    官方推荐工具,功能强大,而且可以集成插件,比如Visual GC,集成过程见https://blog.csdn.net/newbaby2012/article/details/117932447

概述

右上角有两个按钮,一个是执行垃圾回收,一个是堆DUMP,执行堆dump其实就是生成一个堆内存的快照

快照文件内容如下:

概要,这个不讲

主要讲下:

这一栏就是各种类型的类占堆内存的大小及比例

选中其中某一行,比如String,右键,选择"在实例视图中显示",就能在实例数栏里面看到:

左下角就是String的值"malformed input around byte",右上角的字段,就是描述了这个字段的hash, 序列号,classLoader信息,可以看到String的classLoader为null,这个我记得原生类型的classLoader就是null(好像代表bootStraper加载器??)

接下来看下线程栏:

介绍下右上角按钮线程dump

点击以后也会生成一个dump文件,主要记录各个进程的堆栈信息,好像自动检测死锁以后,也会把死锁相关信息放到这里

 

标签:management,Java,sun,虚拟机,Dcom,死锁,线程,jmxremote,性能
来源: https://blog.csdn.net/newbaby2012/article/details/118024270