Java Command Tools常用用法
一、jps
命令
|
效果
|
demo
|
---|---|---|
jps | 显示所有jvm进程,常用jps | grep 查看指定进程是否存在 | |
jps -l | 显示所有jvm进程与进程启动类全路径名 | |
jps -v | 显示所有jvm进程与进程启动的所有jvm配置 |
二、jstat
命令
|
效果
|
demo
|
---|---|---|
jstat -gcutil PID 1000 |
每一秒打印一次gc统计信息 | |
jstat -gcutil -h5 PID 1000 | 每一秒打印一次gc统计信息,每5行打印一次header |
三、jmap
命令
|
效果
|
备注
|
demo
|
---|---|---|---|
jmap -heap PID |
显示java进程的内存分布情况 | 会attach到对应的java进程上 注意:-F参数是完全另一套机制,而且对线上影响较大,因此不推荐使用,当出现
|
|
jmap -histo PID | 显示JVM中各个类的内存的分布情况 | 通常会非常多,可用jmap -histo PID | head -n 100显示top100 | |
jmap -histo:live PID | 会进行一次GC,以显示JVM中存活的类的内存的分布情况 | 注意:会引发一次FGC | |
jmap -dump:format=b,file=./dump.hprof PID | 生成Heap Dump文件 |
可用VIsualVM等工具进行后续分析 参考:Heap Dump分析 |
四、jstack
命令
|
效果
|
备注
|
demo
|
---|---|---|---|
jstack PID |
可查看当前各个线程的执行堆栈并给出当前线程的状态,并检测是否发生死锁 |
本质就是Thread dump,可导入VisualVM进行分析,参考Thread Dump分析 注意:-F参数是完全另一套机制,而且对线上影响较大,因此不推荐使用,当出现
|
|
jstack -l PID | 显示更详细的Threadd Dump 额外打印锁相关信息 | 会显示很多
Locked ownable synchronizers
|
五、jinfo
命令
|
效果
|
备注
|
demo
|
---|---|---|---|
jinfo PID | 打印指定JVM的System Properties与VM Flags | 会attach到执行进程上 |
|
六、jhat
命令
|
效果
|
demo
|
---|---|---|
jhat FilePath | 对Heap Dump产生分析报告,会启动一个tomcat,以html的形式展示分析报告 |
|
常见问题:
1、使用jstack或jmap时出现,请检查是否执行命令的用户和进程启动用户为同一用户
Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
参考文档:
https://stackoverflow.com/questions/26140182/running-jmap-getting-unable-to-open-socket-file