Skip to the content.

JavaVisusal 工具

1. 什么是 JavaVisusal 工具

JavaVisusal 工具的介绍非常简洁直白,如下:

VisualVM is a visual tool integrating commandline JDK tools and lightweight profiling capabilities.

Designed for both development and production time use.

可见 JavaVisusal 工具的特性可以总结为:可视化、内置命令行 JDK 工具、轻量、同时适用于开发以及远程部署。

JDK8 中 JavaVisual 工具属于一款自带工具,而在 JDK11 中,JavaVisual 已经不自带,而需要我们从 https://visualvm.github.io/download.html 上自行下载,并进行安装。

2. 连接

VisualVM 支持的连接远程节点有 2 种方式:jstatd 和 jmx。其中 jstatd 仅支持 monitor,jmx 才能支持 threads 和 sampler。

推荐使用 JMX 方式,不过,如果检测本地,那么完全不需要配置以及连接,使用 Local 节点即可。

3. 界面介绍

VisualVM 一共分为四个页面,如下图所示:

image-20210201225009078

其中 Local 下面显示了本地运行的 Java 应用,例如:

我们以 VisualVM 应用为例,依次介绍这 4 个页面的作用。

3.1 Overview

对当前应用的概述性信息,如下图所示:

image-20210201231505887

应用有关信息:线程号、主机名称、入口类名称、运行参数

JVM 有关信息:JVM 版本号、$JAVA_HOME 参数、JVM Flags、JVM 参数、系统参数。

3.2 Monitor

监视器界面如下图所示:

image-20210201231914711

上图展示的信息有:

3.3 Threads

Threads 界面如下图所示:

image-20210201233618518

线程的排序方式是以名称的字母顺序,线程状态包括:

注意:Running 状态下的线程不一定都处于非阻塞状态,例如使用 Java 的 ServerSocket 会有阻塞问题,但是观察 JavaVisual 工具能够发现线程处于 Running 状态。

具体 Demo 可以参考个人项目:ThreadStateInJava

3.4 Sampler

Sampler 界面用于采样,如下图所示:

image-20210202001155224

可以对 CPU 以及 Memory 进行采样,CPU 专注于对线程的执行时间的采样,Memory 专注于对内存中各种数据类型大小的采样。

3.5 其他插件

除了 CPU、线程、堆、类等信息,还可以通过 Toos 安装插件,例如可以通过安装 VisualVM-BufferMonitor 插件来监控堆外内存(包含 DirectByteBuffer 和 MappedByteBuffer)。