* 如果监控运行与jdk1.5的虚拟上的程序,程序启动时候请添加参数"-Dcom.sun.management.jmxremote"开启JMX管理功能,由于部分工具基于JMX的,但是如果环境在JDK1.6之上,那JMX是默认开启的
名称 | 主要作用 |
jps | JVM Process Status Tool,显示指定系统内的所有HotSpot虚拟机进程 |
jstat | JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据 |
jinfo | Configuration Info for Java,显示虚拟机配置信息 |
jmap | Memory Map for Java,生成虚拟机的内存转储快照(heapdump)文件 |
jhat | JVM Heap Dump Browser,用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果 |
jstack | Stack Trace for Java ,显示虚拟机的线程快照信息 |
jps:虚拟机进程状况工具
jps命令格式: jps [options] [hostid]
hostid: jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态。 hostid是RMI注册表中注册的主机名
,在本地上调用可以省略
选项 | 作用 |
-q | 只输出LVMID,省略主类的名称 |
-m | 输出虚拟机进程启动时传递给主类main()函数的参数 |
-l | 输出主类的全名,如果进程执行的是Jar包,输出Jar路径 |
-v | 输出虚拟机进程启动时JVM参数 |
功能:主要查询正在运行的虚拟机进程,并显示虚拟机执行主类名称和这些进程的本地虚拟机唯一ID(LVMID)
jstat:虚拟机统计信息监视工具(显示本地或远程类装载、垃圾收集、内存、编译情况)
命令格式:jstat [option vmid [interval[s|ms] [count]] ]
对于命令格式中的VMID与LVMID需要特别说明一下:如果本地虚拟机进程,VMID和LVMID是一致的,如果是远程虚拟机进程,那么VMID的格式:
[protocol:][//]lvmid[@hostname[:port]/servername]
参数interval 和 count 表示查询间隔和次数,如果省略这两个参数,说明只查询一次
option 表示用户查询的信息,主要是3类:类装载、垃圾收集、运行期编译情况
示例: jstat -gc 2764 250 20
表示需要每250ms查询一次进程2764的垃圾收集情况,查询20次
jstat -gc 内容解读:
S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)
EC、EU:Eden区容量和使用量
OC、OU:年老代容量和使用量
PC、PU:永久代容量和使用量
YGC、YGT:年轻代GC次数和GC耗时
FGC、FGCT:Full GC次数和Full GC耗时
GCT:GC总耗时
Jinfo:Java配置信息工具
jinfo查询虚拟机各项参数配置
命令格式:
jinfo [options] pid
-v: 查询虚拟机启动时候显式指定的参数列表
-flag: 查询未被显式指定的参数的系统默认值
-sysprops:将虚拟机进程的System.getProperties()的内容打印
并且,在jdk1.6之后,jinfo在window和Linux平台上都有提供,并加入了运行期参数可以改的能力
-flag [+|-] name 或者 -flag name = value修改一部分运行期可用的虚拟机参数
jmap: Java内存影响工具
jmap命令用于生成对转储快照(一般称为heapdump或dump文件)。
如果不适用jmap命令,要想获取到Java堆转储快照,还有些方法:
比如设置虚拟机参数-XX:+HeapDumpOnOutOfMemoryError参数,通过-XX:HeapDumpOnCtrlBreak参数可以使用[Ctrl]+[Break]键来让虚拟机生成dump文件,或者在linux系统下通过kill -3 命令,获取到dump命令
jmap的作用不仅仅是为了获取到dump文件,它还可以查询finalize执行队列、java堆和永久代的详细信息,如空间使用率、使用的是那种垃圾收集器
命令格式:
jmap [option] vmid
示例:先jps获取到vmid,在使用jmap获取到dump文件
jhat: 虚拟机堆转储快照分析工具
和jmap搭配使用分析dump文件,一般不会直接使用jhat命令分析,第一点,本机上分析耗费资源,第二点,相对于VisualVM等dump文件分析工具而言比较简陋
命令格式: jhat dump文件名
jhat内置了一个微型的HTTP/HTML服务器,屏幕显示 "Server is ready.",用户在浏览器键入http://localhost:7000可以直接查看
结果默认已包为单位进行显示,并且分析到内存泄露问题会使用到 Show heap histogram 查询
jstack:Java堆栈跟踪工具
用于生成虚拟机当前时刻的线程快照(也称为threaddump或Javacore文件)。线程快照就是当前虚拟机每一条线程正在执行的方法堆栈集合。主要是定位线程停顿的原因,如死锁,死循环等。
命令格式: jstack [option] vmid ,vmid是jps命令查询到的lvmid
另外,java.lang.Thread类新增了一个getAllStackTraces(),可以获取到线程的StackTraceElement对象,完成jstack的大部分功能
HSDIS:JIT生成代码反编译
让HotSpot的 -XX:+PrintAssembly指令调用它动态生成本地代码还原为汇编代码输出
jdk的可视化工具
1. jconsole:java监视和管理控制台,集合了jps,jstat,jinfo,jstack 的功能
2. visualvm:多合一个故障处理工具