JVM性能分析工具jstack介绍
Posted huanglog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM性能分析工具jstack介绍相关的知识,希望对你有一定的参考价值。
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外, 还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一种工具都有其自身的特点, 用户可以根据你需要检测的应用或者程序片段的状况,适当的选择相应的工具进行检测, 先通过一个表格形式简要介绍下这几个命令的作用和使用方法。本文重点介绍jstack的使用方法。
命令 | 作用 |
---|---|
jps | 基础工具 |
jstack | 查看某个Java进程内的线程堆栈信息 |
jmap | jmap导出堆内存,然后使用jhat来进行分析 |
jhat | jmap导出堆内存,然后使用jhat来进行分析 |
jstat | JVM统计监测工具 |
hprof | hprof能够展现CPU使用率,统计堆内存使用情况 |
jps使用
可以列出本机所有java进程的pid
选项
- -q 仅输出VM标识符,不包括class name,jar name,arguments in main method
- -m 输出main method的参数
- -l 输出完全的包名,应用主类名,jar的完全路径名
- -v 输出jvm参数
- -V 输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件
- -Joption 传递参数到vm,例如:-J-Xms48m
示例:
1
|
[[email protected] board-api]# jps -lvm
|
我们选取PID=67136的Java进程作为后续研究对象。
top使用
除了常用的打印所有进程使用资源外,还可以对单独的进程,打印线程资源排行榜,按T键可对TIME倒序排列, 也就是CPU运行时间。TIME列就是各个Java线程耗费的CPU时间,我们线程pid为67163的线程作为后续线程研究对象
1
|
[[email protected] board-api]# top -Hp 67136
|
jstack使用
jstack主要用来查看某个Java进程内的线程堆栈信息。语法格式如下:
1
|
jstack [option] pid
|
参数如下:
- -l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况
- -m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)
1
|
[[email protected] board-api]# jstack -l 67136 | more
|
使用printf "%x
"
,获得线程ID=的十六进制值。
1
|
[[email protected] board-api]# printf "%x
" 67163
|
查看该线程的堆栈:
1
|
[[email protected] board-api]# jstack -l 67136 | grep 1065b -A20 |
以上是关于JVM性能分析工具jstack介绍的主要内容,如果未能解决你的问题,请参考以下文章