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文件,主要记录各个进程的堆栈信息,好像自动检测死锁以后,也会把死锁相关信息放到这里

 

jmap

 

因为服务器上面不能可视化去观看内存情况,所以需要我们在服务器端通过jmap去生成dump文件,指令如下:

jmap -dump:file=你自定义的文件名 你要查看线程的pid

 

pid 信息可以通过 jps 命令得到,dump文件生成以后,我们可以下载到本地,然后通过jvisualvm 文件=> 装入,在本地可视化观看:

如果想在程序 OutOfMemory的时候自动生成dump文件,可以在VM Option里面添加参数 +HeapDumpOnOutOfMemoryError,然后日志里面会打印出生成的dump文件名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值