一、命令行工具
1 jps
使用ps也能查看,但是如果启动多个虚拟机进程的话,需要jps现实主类的功能来区分开
2 jstat
jvm Stastics Monitoring Tool
显示 本地or远程 jvm进程中的类装载,内存,垃圾收集,JIT编译等运行数据
jstat [option vmid [interval[s|ms] [count]] ]
也可以使用VisualVm等可视化工具监视
3 jinfo
查看配置信息
jinfo [option] pid
4 jmap
jmap (Memory Map for java) 生成堆转储快照(称heapdump 或者 dump),
查询finalize执行队列,Java堆和永久代详细信息。如空间使用率,当前使用的哪种收集器等。
也可以使用 -XX:+HeapDumpOnOutOfMemoryError ,oom后自动生成Dump
-XX:+HeapDumpOnCtrlBreak [ctrl]+[break] 让jvm生成dump
linux 还支持 kill -3
5 jhat
JVM Heap Analysis Tool 与 jmap配合使用
http://localhost:7000
dump文件分析:
6 jstack
Stack track for JAVA 生成虚拟机当前时刻的线程快照(称为threaddump 或者 javacore 文件)
定位出现长时间停顿的原因,如线程间死锁,死循环,请求外部资源导致的长时间停顿
Thread 的getAllStackTraces 可以试试
7 HSDIS插件
JIT生成代码反汇编 Hotspot
字节码:
-XX:+PrintAssembly —> HSDIS —> 动态生成的本地代码还原为汇编代码输出
配置
-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly
使用jdk8 需要安装 hsdis-amd64.dylib ,使用jdk15,直接输出汇编代码了
总结
二、可视化工具
1.JConsole
内存监控
线程监控
2.VisualVM
很强大!!! 性能分析(Profiling) 运行时监控
兼容范围与插件安装:
插件中心地址:
VisualVM java.net/pluginscenters.html
Btrace 动态日志跟踪,可以动态加入原本并不存在的调试代码