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


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

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

启动后是这个样子:

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

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

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

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


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

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

概述

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


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

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

通过 Visual VM,可以实时变更该选项,右击对应的 JVM 进程,在弹出菜单中选择【在出现OOME时生成堆 Dump】
Java七武器系列多情环 --多功能Profiling工具 JVisual VM

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

监视

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

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

线程

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

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

Profiler

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

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

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

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

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

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

Visual GC

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

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

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

BTrace

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

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

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

@BTrace(unsafe=true)

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

堆Dump

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

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

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

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

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

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


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

本站所有文章均来自互联网,如有侵权,请联系站长删除。极客文库 » Java七武器系列多情环 –多功能Profiling工具 JVisual VM
分享到:
赞(0)

评论抢沙发

评论前必须登录!