JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,接下来逐一对各种工具作一介绍:
jps虚拟机进程状况工具(Java Virtual Machine Process Status Tool)
可以列出正在运行的 虚拟机的 进程,并显示虚拟机的主类名称,以及这些进程的本地虚拟机唯一ID,它是使用频率最高的jdk命令行工具。
作用:用于输出JVM进程状态信息
语法:jps [options] [hostid]
说明:
1、options:命令选项,用来对输出格式进行控制,jps命令选项如下:
-q 不输出类名、Jar名和传入main方法的参数
-m 输出传入main方法的参数
-l 输出main类或Jar的全限名
-v 输出传入JVM的参数
2、hostid:指定监控主机,默认为当前主机;
jstat 虚拟机统计信息监视工具(Java Virtual Machine statistics monitoring tool)
用于监视虚拟机各种运行状态信息的命令行工具,他可以显示本地或者远程虚拟机进程中类加载、内存、垃圾回收、jit编译等运行数据,在没有GUI图形界面-只提供了纯文字控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。
作用:用于查看堆内存各部分的使用量及加载类的数量
语法:jstat -<option> [-t] [-h<lines>] <vmid> [<interval[s|ms]> [<count>]]
说明:
option:命令选项,通过jstat -options可以查看jstat支持哪些命令选项
-t:timestamp简写,
-h<lines>:h是显示标题,lines代表一个整数,-h3表示每三行显示一次标题
vmid:VM进程号,即当前运行的Java进程号
interval:间隔多长时间统计一次,默认单位ms(毫秒),如果为s,则为秒
count:统计次数,如果省略,则统计无限次,但interval和count都省略,则只统计一次
jmap----java内存映像工具(Memory Map for Java)
用于生成堆转储快照(一般称为heapdump或dump文件)。
可以查询finalize 执行队列、Java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器
作用:监控内存内的Java对象
语法:jmap [option] <pid>
但它和jinfo命令一样,有不少功能在Windows平台下是受限的。
说明:
option:命令选项,常用选项如下:
-heap 打印Java堆概要信息,包括使用的GC算法、堆配置参数和各代中堆内存使用情况;
-histo[:live] 打印Java堆中对象直方图,通过该图可以获取每个class的对象数目,占用内存大小和类全名信息,带上:live,则只统计活着的对象
-permstat 打印永久代统计信息
-finalizerinfo 打印等待回收的对象信息
-dump:<dump-options> 以hprof二进制格式将Java堆信息输出到文件内,该文件可以用MAT、VisualVM或jhat等工具查看;
dump-options选项:
live 只输出活着的对象;不指定,则输出堆中所有对象
format=b 指定输出格式为二进制
file=<file> 指定文件名及文件存储位置,例如:jmap -dump:live,format=b,file=D:\heap.bin <pid>
-F 与-dump:<dump-options> <pid>或-histo<pid>一起使用,当<pid>没有响应时,强制执行;注意:不支持live子选项
pid:进程id