Day357.JVM监控及诊断工具-GUI -JVM

Posted 阿昌喜欢吃黄桃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day357.JVM监控及诊断工具-GUI -JVM相关的知识,希望对你有一定的参考价值。

JVM监控及诊断工具-GUI

实际中,你下面有1-2款会用即可

一、工具概述


二、JConsole

了解

1、基本概述


2、启动

  • 在jdk安装目录中找到jconsole.exe,双击该可执行文件就可以

  • 打开DOS窗口,直接输入jconsole就可以了


3、三种连接方式

①Local

使用JConsole连接一个正在本地系统运行的JVM,并且执行程序的和运行JConsole的需要是同一个用户。JConsole使用文件系统的授权通过RMI连接起链接到平台的MBean的服务器上。这种从本地连接的监控能力只有Sun的JDK具有。

注意:本地连接要求 启动jconsole的用户 和 运行当前程序的用户 是同一个用户

具体操作如下:

1、在DOS窗口中输入jconsole

2、在控制台上填写相关信息

3、选择“不安全的连接”

4、进入控制台页面


②、Remote

使用下面的URL通过RMI连接器连接到一个JMX代理,service:jmx:rmi:///jndi/rmi://hostName:portNum/jmxrmi。JConsole为建立连接,需要在环境变量中设置mx.remote.credentials来指定用户名和密码,从而进行授权。


③Advanced

使用一个特殊的URL连接JMX代理。一般情况使用自己定制的连接器而不是RMI提供的连接器来连接JMX代理,或者是一个使用JDK1.4的实现了JMX和JMX Rmote的应用


4、主要作用

1、概览

2、内存

3、根据线程检测死锁

4、线程

5、VM 概要


三、Visual VM

掌握

jvisualvm和visual vm的区别

visual vm是单独下载的工具,然后将visual vm结合到jdk中就变成了jvisualvm,仅仅是添加了一个j而已,这个j应该是java的用处,所以说jvisualvm其实就是visual vm


1、基本概述

使用

1、在jdk安装目录中找到jvisualvm.exe,然后双击执行即可

2、打开DOS窗口,输入jvisualvm就可以打开该软件


2、插件的安装


首先在IDEA中搜索VisualVM Launcher插件并安装:

2、重启IDEA,然后配置该插件

3、使用两种方式来运行程序

4、运行效果

还是打开jvisualvm界面,只是不需要我们手动打开jvisualvm而已


3、连接方式


4、主要功能

①生成/读取堆内存快照

一、生成堆内存快照

1、方式1:

2、方式2:

注意:

生成堆内存快照如下图:

这些快照存储在内存中,当线程停止的时候快照就会丢失,如果还想利用,可以将快照进行另存为操作,如下图:

二、装入堆内存快照


②查看JVM参数和系统属性

③查看运行中的虚拟机进程

④生成/读取线程快照

一、生成线程快照

1、方式1:

2、方式2:

注意:

生成线程快照如下图:

这些快照存储在内存中,当线程停止的时候快照就会丢失,如果还想利用,可以将快照进行另存为操作,如下图:

二、装入线程快照


⑤程序资源的实时监控

⑥其他功能


四、Eclipse MAT

主要分析堆内存dump文件,找出内存泄露问题

1、基本概述

注意如果单独使用,那么解压即可用,不需要安装即可


2、获取堆dump文件

①dump文件内存


②两点说明


③获取dump文件


3、分析堆dump文件


①histogram

展示了各个类的实例数目以及这些实例的Shallow heap或者Retained heap的总和

图标

具体内容


②thread overview

图标

具体信息


③获得对象互相引用的关系

  • with outgoing references

变量被外部的引用链

图示:

结果:


  • with incoming references

这个变量被谁引用了

图示:

结果:


④浅堆与深堆

  • shallow heap,浅堆

不算引用类型的大小,就是只算基本数据类型大小

对象头代表根据类创建的对象的对象头,还有对象的大小不是可能向8字节对齐,而是就向8字节对齐


  • retained heap,深堆

注意:
当前深堆大小 = 当前对象的浅堆大小 + 对象中所包含对象的深堆大小


  • 补充:对象实际大小

  • A的浅堆大小是A他自己
  • 浅堆不包含引用空间
  • A的深堆大小是A+D
  • 深堆大小包含浅堆大小 加上 只有被A所指向的引用对象大小(就是上面的D,因为C被A/B同时指向),所以不算
  • A的实际对象大小是ACD
  • 实际对象大小是包含A本身,且他能可达触及到的所有对象大小,A本身+指向的C和D

  • 练习

  • A

    • 浅堆:A
    • 深堆:A
    • 对象实际大小:A
  • B
    - 浅堆:B
    - 深堆:B C
    - 对象实际大小: B C D


明天继续!!!

以上是关于Day357.JVM监控及诊断工具-GUI -JVM的主要内容,如果未能解决你的问题,请参考以下文章

JVM监控及诊断工具大全

JVM监控及诊断工具之JConsole以及Visual VM

JVM监控及诊断工具之Eclipse MAT

JVM监控及诊断工具-命令之jhat

JVM监控及诊断工具-命令之jcmd

JVM监控及诊断工具-命令之jmap