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

开发 开发工具
Java VisualVM。是一款可视化的 Java VM 应用分析工具,本文我们以本地进程为例,来介绍下JVisual VM 常见功能。

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

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

这款工具就是JVisual VM,全称是 Java VisualVM。是一款可视化的 Java VM 应用分析工具。

启动后是这个样子:

JVisual VM启动后

分本地和远程两种,罗列了当前的 JVM 进程。 远程的进程是通过 JMX 进行连接,有一些本地的 Profile 功能不支持。

我们以本地进程为例,来介绍下JVisual VM 常见功能。

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

由于Visual VM 实现和 NetBeans 一致,所以可以通过插件的方式,增加许多功能。

在【工具】菜单,选择【插件】,打开下图,然后选择要安装的插件,也可以将插件下载到本地再安装。格式是一个扩展名为nbm类型的文件。

JVisual VM

像我们稍后要介绍的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,分析方法的执行时间。

CPU profiling,分析方法的执行时间

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

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

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

Visual GC

注意:该 Tab 需要安装插件后才能显示。

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

可视化的GC 查看工具

通过这个工具,能够观察堆各个区域的大小,占用情况等。比如在配置了Xms, PermSize, 或者一些 xxxRation之类的,具体分到各个代的大小是多少,除了计算之外,可以在这里直观的查看。

同时,在每个每个 Gen 旁边,都有显示 GC 的执行次数和时间。

BTrace

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

BTrace

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

  1. @BTrace(unsafe=true

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

堆Dump

生成堆dump之后,相当于对当前的堆做了一个镜像,可以基于此分析应用内的一些问题。

整个dump中,除了摘要外,还有类,实例数等和 Profiler 中实时内容一致。此外,还包含线程的 stackTrace。

堆Dump

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

堆Dump

在OQL控制台中可以通过招待OQL来查看对象的信息,和前面 SA中介绍的类似。(Java七武器系列长生剑 -- Java虚拟机的显微镜 Serviceability Agent)

堆Dump

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

【本文为51CTO专栏作者“侯树成”的原创稿件,转载请通过作者微信公众号『Tomcat那些事儿』获取授权】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2020-08-31 09:01:16

GlancesLinux系统监控工具

2017-06-09 15:17:48

Java线程jstack

2017-03-26 23:16:05

Java线程jstack

2009-12-23 17:10:26

2009-10-27 13:20:08

2011-02-21 12:43:00

RackTables网络监控网络管理

2019-10-29 06:30:31

告警疲劳网络安全安全风险

2017-10-17 14:02:30

jvm调优工具

2021-07-16 09:55:46

数据工具软件

2017-06-02 09:52:50

2018-05-27 08:24:55

2017-12-15 09:05:16

Linux终端高手Bash shell

2018-12-12 08:15:13

物联网设备物联网IOT

2009-09-14 09:36:19

Chrome多功能平台谷歌

2009-06-01 08:43:49

PalmWebOS移动OS

2024-01-31 08:33:06

C++编程计算器

2009-12-23 17:20:55

Fedora GCC

2010-03-05 17:24:04

Android智能系统

2010-08-31 16:23:10

DB2Quest Centr管理

2018-11-29 10:22:43

Java应用服务器
点赞
收藏

51CTO技术栈公众号