• 近期将进行后台系统升级,如有访问不畅,请稍后再试!
  • 极客文库-知识库上线!
  • 极客文库小编@勤劳的小蚂蚁,为您推荐每日资讯,欢迎关注!
  • 每日更新优质编程文章!
  • 更多功能模块开发中。。。

Java七武器系列多情环 –多功能Profiling工具 JVisual VM


开发 Java 的朋友一定都遇到过应用不同种类的问题,有些时候是应用 Bug 分析,有些时候是应用性能调优,应用的 Profiling,GC 分析等。

这个时候,有不少的工具可供选择,有商业的,有开源的可供不同的场景下使用。我们本次的多功能 Profile 工具,依然是 JDK 自带的一款,可用于多种场景下的应用监控于分析。
这款工具就是JVisual VM,全称是 Java VisualVM。是一款可视化的 Java VM 应用分析工具。

启动后是这个样子:


分本地和远程两种,罗列了当前的 JVM 进程。 远程的进程是通过 JMX 进行连接,有一些本地的 Profile 功能不支持。
我们以本地进程为例,来介绍下 Visual VM 常见功能。

双击要分析的 JVM 进程,在打开的 Tab 中选择功能,默认会显示概述、监视、线程、抽样器和 Profiler 这几项。

由于 Visual VM 实现和 NetBeans 一致,所以可以通过插件的方式,增加许多功能。
在【工具】菜单,选择【插件】,打开下图,然后选择要安装的插件,也可以将插件下载到本地再安装。格式是一个扩展名为nbm类型的文件。


像我们稍后要介绍的 Visual GC, BTrace 都是通过插件安装,来增加对应功能的。

概述

在概述这个 Tab 中,会有当前 JVM 进程的一些基本信息,包含 JVM 的参数,系统属性,Main-class 等等。类似如下图:



请注意上图红框,这个是一般启动时配置的一个 JVM 选项,可以在 OOM 产生时生成一个堆的 dump,方便事后分析。如果没有在启动时配置,默认是关闭的。这里也显示是禁用。

通过 Visual VM,可以实时变更该选项,右击对应的 JVM 进程,在弹出菜单中选择【在出现 OOME 时生成堆 Dump】

选择之后,对应的概述处变为启用

监视

在该 Tab 中会显示 CPU,堆的使用,已装入的类的情况,以及线程的活动情况等。关键是这里有两个按钮【执行垃圾回收】和【堆 Dump】。
垃圾回收会进行一次 Full GC,堆的 Dump 会生成一个当前的 dump 文件供分析。


线程

线程 Tab 会将当前进程的所有线程按时间线的形式开出来。可以根据不同的线程状态进行查看。这里还可以进行线程的 Dump,和 jstack 功能一致,生成一个所有线程的运行调用图。(jstack,可以查看前面的文章了解。Java 七武器系列霸王枪 — 线程状态分析 jstack

抽样器
可以按照 CPU 和内存进行抽样, 和 Profiler 类似,我们后面介绍。

Profiler

在众多功能中,该功能可用于进行应用的 Profiling,分析应用方法的占用时间,内存中各个类的对象数量及大小等。
下方的图是 CPU profiling,分析方法的执行时间。


这张图是内存的 profiling,显示对象在内存中的数量及大小

通过这两种 profiling,对于应用中有内存占用较多的情况发生时,可以观察是哪些对象占用,是否有些代码中存在的总是导致生成的大量无用的对象等。

这两个功能和工具 MAT 的几个功能类似。

Visual GC

注意:该 Tab 需要安装插件后才能显示。
一直以来,Java 的 GC 对于我们来说只能通过在命令行中展示的方式,或者是从 gc log 里查看一些 执行情况,Visual VM 的 Visual GC 插件,可以让我们更直观的观察 堆的占用,GC 的执行情况等,是个可视化的 GC 查看工具。

通过这个工具,能够观察堆各个区域的大小,占用情况等。比如在配置了 Xms, PermSize, 或者一些 xxxRation 之类的,具体分到各个代的大小是多少,除了计算之外,可以在这里直观的查看。
同时,在每个每个 Gen 旁边,都有显示 GC 的执行次数和时间。

BTrace

前面的文章写过使用 BTrace 分析总是,当时是介绍通过命令行的方式。在 Visual VM 的插件里,也有 BTrace 的插件,安装之后,可以在本地的 JVM 进程上右击选择 【Trace application】,就会打开该 Tab,然后在窗口中直接编译 Trace 脚本,执行结果也会在窗口中显示。

注意这里有一个 Unsafe 的开关,可以使用 BTrace 的更多操作,靠选择 checkbox 是打不开的。需要在@BTrace 注解后增加内容,格式如下:

@BTrace(unsafe=true)

这样即可,checkbox 会自动选中。

堆 Dump

生成堆 dump 之后,相当于对当前的堆做了一个镜像,可以基于此分析应用内的一些问题。
整个 dump 中,除了摘要外,还有类,实例数等和 Profiler 中实时内容一致。此外,还包含线程的 stackTrace。

在类中双击任意一个要关注的,会打开实例数视图,显示该类对应的各个实例的数据

在 OQL 控制台中可以通过招待 OQL 来查看对象的信息,和前面 SA 中介绍的类似。



发现没有,其实 JDK 提供的这些工具中,有许多功能都是相同的,通过统一的接口,在不同的应用中提供相应的数据,一处水源供全球。


丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:Java 七武器系列多情环 –多功能 Profiling 工具 JVisual VM
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

欢迎 注册账号 登录 发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00