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。