本文内容

         1.jvisualvm介绍

         2.jvisualvm堆dump

         3.小结

1.jvisualvm介绍

         与jconsole一样都是一款提供给开发人员使用的用于调试java进程的辅助工具。区别在于jconsole提供的功能与界面相对简单。jvisualvm使用较为丰富的可视化界面来呈现运行时的各项数据,功能上更为强大和全面。当然,事物都有两面性,jvisualvm启动会消耗更多的系统资源。和jconsole一样,能够对本机和远程的java进程进行全方位的监控。它通过集成一系列可视化的插件来实现强大的功能并支持拓展。

          jvisualvm位于jdk安装目录的bin目录下面,启动后会在左侧栏目列出所有运行中的java进程

选中一个进程之后就可以查看该进程的基本信息

点击菜单栏 工具->插件 可以查看它集成了哪些插件

2.jvisualvm堆dump

          一般我们查看java对象可以通过在程序中加入日志打印相关对象信息或者调试模式下在开发工具中查看。加入日志打印功能可能需要修改源代码具有较强的侵入性,开启调试模式可能比较消耗性能。那么这个时候就可以选择使用堆dump功能来查看对象信息。

  

堆dump会将内存中的对象信息通过一定的格式存储到磁盘中,实现了堆对象的持久化保存。转储后会生成一个hprof后缀名文件

 这个文件可以通过jvisualvm载入进行离线分析,所以可以通过堆转储实现对不同时间点堆情况的分析

可以通过OQL控制台具体查看格式化的堆对象信息

进入OQL控制台页面,可以通过在查询编辑器界面输入类似 SQL 的查询语句列举对堆对象,如下示例查看 堆中的java.io.File类的所有对象

 选中一个java.io.File对象进入详细页面,可以查看该对象的所有字段信息和该对象的引用关系,“字段”区域包括java.io.File类以及其所有父类的字段以及对应字段的值,"引用"区域包括引用该File对象的对象。即某个ResilientFileOutputStream对象的file字段指向了这个java.io.File对象

 选择ResilientFileOutputStream对象后点击右键菜单,还可以对引用对象继续进行追溯

3.小结

          使用jvisualvm对java进程数据的监控,能够帮助我们提升排查Bug的效率,尤其是堆dump功能。比如我们可以列举java.io.FileOutputStream类对象来查看java进程中哪些文件没有被正确关闭,可以通过堆dump功能来判断一个类对象是否已经被垃圾回收器回收,还可以通过一个类对象的引用分析堆栈调用链,对深入理解运行库的原理都很有帮助。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐