JDK自带工具

简介

jcmd: 它用来打印 Java 进程所涉及的基本类、线程和 VM 信息

jconsole: 提供JVM活动的图形化视图,包括线程的使用、类的使用和GC活动

jhat: 读取内存堆转储,并有助于分析

jmap: 提供堆转储和其他JVM内存使用的信息

jinfo: 查看JVM的系统属性,可以动态设置一些系统属性

jstack: 转储Java进程的栈信息

jstat: 提供GC和类装载活动的信息

jvisualvm: 监视JVM和GUI工具,可用来剖析运行的应用,分析JVM堆转储

jcmd可查看参数及含义

命令

描述

jcmd process_id VM.uptime

查看 JVM 的运行时长

jcmd process_id GC.class_histogram

查看JVM的类信息,可以查看每个类的实例数量和占用空间大小

jcmd process_id Thread.print

查看JVM的Thread Dump,查看线程运行情况

jcmd process_id GC.heap_dump FILE_NAME 

查看JVM的Heap Dump。只指定文件名,默认会生成在启动JVM的目录里

jcmd process_id VM.system_properties

查看JVM的系统参数

jcmd process_id VM.flags

查看JVM的调优参数

jcmd process_id VM.command_line

查看JVM的启动命令行

jcmd process_id GC.run_finalization

对 JVM 执行 java.lang.System.runFinalization(),尽量别去调用这个对象的finalize方法。

jcmd process_id GC.run

对 JVM 执行 java.lang.System.gc(),告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的

jcmd process_id PerfCounter.print

向正在运行的JVM发送诊断信息请求

应用

基础的VM信息

运行时间

此命令可以查看JVM运行的时长:

jcmd process_id VM.uptime

系统属性

以下命令可以显示System.getProperties()的各个条目

jcmd process_id VM.system_properties

或者

jinfo -sysprops process_id

JVM版本

用以下方式获取JVM版本

jcmd process_id VM.version

JVM命令行

jconsole的“VM摘要”页可以显示程序所用的命令行,或者用jcmd显示

jcmd process_id VM.command_line

JVM调优标志

可用以下方式获得对应用生效的JVM调优标志

jcmd process_id VM.flags [-all]

以下是如何获取进程中所有标志的值

jinfo -flag PrintGCDetails process_id

线程信息

jconsole和jvisualvm可以实时显示应用中运行的线程的数量。查看运行线程的栈信息,对于判断线程是否被阻塞很有用

可以通过jstack获取栈信息

jstack process_id

也可以通过jcmd获取栈信息

jcmd process_id Thread.print

类信息

jconsole 或 jstat 可以提供应用已使用类的个数。jstat 还能提供类编译相关的信息。

实时GC分析

jconsole 可以用实时图显示堆的使 用情况。jcmd 可以执行 GC 操作。jmap 可以打印堆的概况、永久代信息或者创建堆转储。 jstat 可以为垃圾收集器正在执行的操作生成许多视图。

事后堆转储

jvisualvm 的 GUI 界面可以捕获堆转储,也可以用命令行 jcmd 或 jmap 生成。堆转储是 堆使用情况的快照,可以用不同的工具进行分析,包括 jvisualvm 和 jhat。