JVM调优工具
名称 | 全写 | 主要作用 |
---|---|---|
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 | 显示虚拟机的线程快照 |
命令格式 jps [ options ] [ hostid ]
执行样例
文章图片
image.png 其他参数
选项 | 作用 |
---|---|
-q | 只输出 LVMID ,省略主类的名称 |
-m | 输出虚拟机进程启动时主类 main() 函数的参数 |
-l | 输出主类的全名,如果进程执行的是 jar 包,输出 jar 包路径 |
-v | 输出虚拟机进程启动时 JVM 参数 |
命令格式 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 编译的方法 |
命令格式 jstat [ options ] [ hostid ]
执行样例
文章图片
image.png 4. jmap Java内存映像工具
命令格式 jstat [ options ] [ hostid ]
执行样例
文章图片
image.png 其它参数
选项 | 作用 |
---|---|
-dump | 生成 Java 堆转储快照。格式为:-dump:[live, ]format=b, file= |
-finalizerinfo | 显示在 F-Queue 中等待 finalizer 线程执行 finalize 方法的对象。只在 Linux/Solaris 平台下有效 |
-heap | 显示 Java 堆详细信息,如使用那种回收期、参数配置、分代状况等。只在 Linux/Solaris 平台下有效 |
-histo | 显示堆中对象统计信息,包括类、实例数量、合计容量 |
-permstat | 已 ClassLoader 为统计口径显示永久代内存状态。只在 Linux/Solaris 平台下有效 |
-F | 当虚拟机进程对 -dump 选项没有响应时,可使用这个选项强制生成 dump 快照。只在 Linux/Solaris 平台下有效 |
命令格式 jhat 堆文件
6. jstack Java堆栈跟踪工具
命令格式 【JVM调优工具】jstack [ option ] vmid
执行样例
文章图片
image.png 其它参数
选项 | 作用 |
---|---|
-F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
-l | 除堆栈外,显示关于锁的附件信息 |
-m | 如果调用到本地方法的话,可以显示 C/C++ 的堆栈 |
for (Map.Entry threadEntry : Thread.getAllStackTraces().entrySet()) {
Thread key = threadEntry.getKey();
StackTraceElement[] value = https://www.it610.com/article/threadEntry.getValue();
if (key.equals(Thread.currentThread())) {
continue;
}log.info("线程:" + key.getName());
for (StackTraceElement stackTraceElement : value) {
log.info("{}", stackTraceElement);
}
}
推荐阅读
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 孩子不是实现父母欲望的工具——林哈夫
- 最有效的时间管理工具(赢效率手册和总结笔记)
- 工具|后天就是七夕节,你准备好了吗(送上几个七夕代码,展示你技能的时候到了!)
- 工具分享|5个有趣好玩的网站,拒绝无聊!
- jvm关于String
- 工具人的一天
- jvm常见分析工具
- docker镜像探索----dive工具
- 【22】高效·要有高效的工具支持