名称 | 全写 | 主要作用 |
---|---|---|
jpa | 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 | 显示虚拟机的线程快照 |
1. jps 虚拟机进程状况工具
命令格式
jps [ options ] [ hostid ]
执行样例
image.png其他参数
选项 | 作用 |
---|---|
-q | 只输出 LVMID ,省略主类的名称 |
-m | 输出虚拟机进程启动时主类 main() 函数的参数 |
-l | 输出主类的全名,如果进程执行的是 jar 包,输出 jar 包路径 |
-v | 输出虚拟机进程启动时 JVM 参数 |
2. jstat 虚拟机统计信息监视工具
命令格式
jstat [ options vmid [interval[s|ms] [count] ] ]
执行样例
250毫秒查询一次进程12914垃圾收集状态,一共查询20次
image.png
其他参数
选项 | 作用 |
---|---|
-class | 监视类装载、卸载数量、总空间以及类装载所耗费的时间 |
-gc | 监视 java 堆状况,包括 Eden 区、两个 survivor 区、老年代、永久代等的容量、已用空间、GC时间合计等信息 |
-gccapacity | 监视内容与 -gc 基本相同,但输出主要关注 Java 堆各个区域使用到的最大、最小空间 |
-gcutil | 监视内容与 -gc 基本相同,但输出主要关注已使用空间占空间的百分比 |
-gccause | 与 -gcutil 功能一样,但是会额外输出导致上一次 GC 产生的原因 |
-gcnew | 监视新生代 GC 状况 |
-gcnewcapacity | 监视内容与 -gcnew 基本相同,输出主要关注使用到的最大、最小空间 |
-gcold | 监视老年代 GC 状态 |
-gcoldcapacity | 监视内容与 -gcold 基本相同,输出主要关注使用到的最大、最小空间 |
-gcpermcapacity | 输出永久代使用到的最大、最小空间 |
-compiler | 输出 JIT 编译器编译过的方法、耗时等信息 |
-printcompilation | 输出已经被 JIT 编译的方法 |
3. jinfo Java配置信息工具
命令格式
jstat [ options ] [ hostid ]
执行样例
image.png4. jmap Java内存映像工具
命令格式
jstat [ options ] [ hostid ]
执行样例
image.png其它参数
选项 | 作用 |
---|---|
-dump | 生成 Java 堆转储快照。格式为:-dump:[live, ]format=b, file=<filename>,其中 live 子参数说明是否只 dump 出存活的对象 |
-finalizerinfo | 显示在 F-Queue 中等待 finalizer 线程执行 finalize 方法的对象。只在 Linux/Solaris 平台下有效 |
-heap | 显示 Java 堆详细信息,如使用那种回收期、参数配置、分代状况等。只在 Linux/Solaris 平台下有效 |
-histo | 显示堆中对象统计信息,包括类、实例数量、合计容量 |
-permstat | 已 ClassLoader 为统计口径显示永久代内存状态。只在 Linux/Solaris 平台下有效 |
-F | 当虚拟机进程对 -dump 选项没有响应时,可使用这个选项强制生成 dump 快照。只在 Linux/Solaris 平台下有效 |
5. jhat 虚拟机堆转储快照分析工具
命令格式
jhat 堆文件
6. jstack Java堆栈跟踪工具
命令格式
jstack [ option ] vmid
执行样例
image.png其它参数
选项 | 作用 |
---|---|
-F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
-l | 除堆栈外,显示关于锁的附件信息 |
-m | 如果调用到本地方法的话,可以显示 C/C++ 的堆栈 |
在 JDK 1.5中,java.lang.Thread 类新增了一个 getAllStackTraces() 方法用于获取虚拟机中所有线程的 StackTraceElement 对象。使用这个可以随时查看线程堆栈。
for (Map.Entry<Thread, StackTraceElement[]> threadEntry : Thread.getAllStackTraces().entrySet()) {
Thread key = threadEntry.getKey();
StackTraceElement[] value = threadEntry.getValue();
if (key.equals(Thread.currentThread())) {
continue;
}
log.info("线程:" + key.getName());
for (StackTraceElement stackTraceElement : value) {
log.info("{}", stackTraceElement);
}
}
网友评论