jvm调试与定位经常会用到jdk自带的工具,对于理解内存管理,垃圾回收机制,java线程堆栈,内存溢出,泄漏,死锁等问题的定位很有帮助。
监控类工具
用于监控jvm性能参数
1. jps - JVM Process Status Tool
用于输出JVM中运行的进程状态信息,类似ps
常用指令
jps -ml 输出main方法参数及全名
2. jstat - JVM Statistics Monitoring Tool
监控虚拟机的各种运行状态信息,如类的装载、内存、GC、JIT编译器等,常用于查看gc信息
jstat -gc {pid} {interval} {count}
调试类工具
用于定位某种特定的问题
1. jinfo - Configuration Info
用于打印java进程的配置信息,包括java系统属性、java虚拟机命令行表示参数。可查看和调整虚拟机各项参数。
jinfo -sysprops {pid}
2. jhat - Heap Dump Brower
常用于jmap dump后的快照文件打开分析
jhat -port {XXX} {dumpFileName} 然后可以在浏览器中输入hostName:port查看
3. jmap - Memory Map
查看堆内存使用状况,一般结合jhat使用
jmap -heap {pid} 查看进程堆内存使用情况
jmap -histo[:live] {pid} 查看堆内存中的对象数目,大小统计,带上live则只统计活对象。
jmap -dump:format=b,file={dumpFileName} 把进程内存使用情况导出到文件,然后可以使用MAT等工具查看,也可用jhat查看
4. jstack - Stack Trace
查看某个java进程中的线程堆栈信息,为当前时刻的快照,常用来找出java进程中最耗费CPU的线程,具体过程如下:
- 通过ps -ef找出java进程Id;
- 利用top -Hp {pid}找出最耗费CPU的线程A;
- A转换为十六进制;
- jstack {pid} |grep {A} 输出堆栈信息,然后通过找到对应代码进一步定位。
也可用于定位死锁,死循环等问题