VisualVM: 线程与堆内存监控分析工具

VisualVM 是什么 VisualVM 是一个图形化的 JVM 监控与分析工具,可以查看应用程序的 CPU、内存占用,监控线程状态,生成线程转储(Thread Dump)或堆转储(Heap Dump),跟踪内存泄漏,监控垃圾回收,并支持简单的 CPU/内存 profiling。它也能浏览和操作 MBean,配合 JMX 做远程监控。 VisualVM 曾在 JDK 6 Update 7 之后随 Sun/Oracle JDK 一起分发;从 JDK 9 起被移出 JDK 发行包,独立成开源项目 visualvm.github.io,需要单独下载安装,本身要求 JDK 8 及以上运行,但可以监控 JDK 1.4 以上版本的目标进程。 安装与启动 从 visualvm.github.io 下载对应平台的安装包,解压后运行 visualvm(Windows 下是 visualvm.exe)。 如果 VisualVM 找不到本机 JDK,用 -jdkhome 显式指定: visualvm -jdkhome /path/to/jdk 插件默认安装在用户目录下,例如 Windows: %APPDATA%\VisualVM\<version> 线程监控与 Thread Dump 启动 VisualVM 后,“应用程序 > 本地” 节点会列出本机正在运行的 Java 进程。双击目标进程,切换到「线程」标签页,可以看到各线程的实时状态跟踪。 点击「线程 Dump」按钮会生成当前时刻的线程转储文件,里面包含每个线程的调用栈、锁等待对象等信息,用来定位线程阻塞、死锁的位置;关于线程转储的字段含义与死锁排查方法,参考 jstack。 VisualVM 线程状态 状态 说明 Running 正在运行 / 可运行(runnable) Sleeping 线程调用了 Thread.sleep() Wait 线程处于 wait 或 timed_waiting Park 线程调用了 LockSupport.park() Monitor 线程被 monitor 锁阻塞(blocked) 远程监控 VisualVM 也可以通过 JMX 或 jstatd 监控远程 JVM 进程,思路和本地类似,多了一步网络连接配置。 ...

Created 4046-11-04 · Updated 16166-07-16 · 2 min · 245 words · -