JDK自身携带了大量的工具,以jdk1.6.0_38为例,已经自带了47个工具,包括大量的调试分析工具,有些是命令行有些是图形界面工具,这篇文章记录下其中一些工具的使用说明,以后有新的使用体会了再完善补充这篇文章
1 jstack
jstack用于打印java进程的堆栈信息或者从jvm进程崩溃后生成的dump文件生成堆栈信息
命令使用格式
jstack [option] pid
jstack [option] core_file
jstack [option] [server_id@]<remote server ip or hostname>
其中[option] 可选参数有
-l -m -F 详细说明通过jstack -h来查看
英文原文说明如下:
-F to force a thread dump. Use when jstack <pid> does not respond (process is hung)
-m to print both java and native frames (mixed mode)
-l long listing. Prints additional information about locks
-h or -help to print this help message
2 jps
和unix/linux里的ps类似,jps只打印jvm上运行的进程信息 输出运行进程的启动文件名和进程ID(pid)
jps命令参数说明
-q 不输出类名、Jar名和传入main方法的参数
-m 输出传入main方法的参数
-l 输出main类或Jar的全限名
-v 输出传入JVM的参数
3 jmap
jmap用于打印java进程堆栈信息和java堆内存转存到文件
(一) java -histo pid 打印java堆内类的实例数、字节数和类目,截图是本地的eclipse进程输出信息
(二) java -histo:live pid和上面的类似,只是打印"存活"的对象
(三) jmap -dump:file=file_path pid 将java 堆内存以hprof 二进制格式转存到文件。
关于hprof二进制格式的说明可以参考这里 https://java.net/downloads/heap-snapshot/hprof-binary-format.html
(四) jmap -heap pid 打印java 堆内存概述信息
下图是在某测试机器上执行情况
参数的解释
NewRatio:年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)
SurvivorRatio:Eden区与Survivor区的大小比值
4 jconsole和jvisualvm
这两个是图像化工具所见即所得,不仅支持本地而且还支持远程监视,不过远程连接之前要先做配置
5 jstat
查看jvm运行状态工具,包括JVM内各种内存空间(Eden Survivor 1/2 Old)使用情况和各种GC(YongGC Full GC)发生次数
jstat -options 查看可选参数
输出如下
这些选项分别表示
统计本地eclipse GC信息
其中从做到右的S0 S1 GCT分别代表如下
S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
其它工具以后使用到了 有空再继续写