Java的监控与性能调优工具很多,除了JDK自带的一些工具外,还有像Jprofilerz这样非常好用的商业工具。下面对JDK自带的一些工具做个简要说明,以便需要时找到最合适的工具。
JProfiler在java程序性能调试方面是翘楚,无须赘言,参见:《Jprofiler6的安装与使用说明》。
下面为JDK自带的一些工具:
所有工具都在JDK的bin目录,而在这些工具中,除jvisualvm与jconsole为GUI图形化,其他均为命令行。
jps: 即Java Virtual Machine Process Status Tool的缩写,用于查看JVM进程状态的工具。与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。
jvisualvm:可监控、性能评估、故障诊断主机上所有java进程的cpu,内存,线程使用情况。
jinfo:可以输出并修改运行时的java进程的opts。
jstat:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jstat -class pid 显示加载class的数量,及所占空间等信息。
jstat -compiler pid 显示VM实时编译的数量等信息。
jstat -gc pid 可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
jstat -gccapacity pid 可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推,OC是old内纯的占用量。
jstat -gcnew pid 查看new对象的信息。
jstat -gcnewcapacity pid 查看new对象的信息及其占用量。
jstat -gcold pid 查看old对象的信息。
jstat -gcoldcapacity pid 查看old对象的信息及其占用量。
jstat -gcpermcapacity pid 查看perm对象的信息及其占用量。
jstat -util pid 统计gc信息统计。
jstat -printcompilation pid 当前VM执行的信息。
除了以上参数外,后面还可以附加两个数字参数,如:jstat -printcompilation 3024 250 6;含义是,每250毫秒打印一次,一共打印6次。另外,其后也还可以加上-h3这样的参数,每三行显一次标题。
jmap:打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。
jconsole:可用图表化的形式显示各种数据,并可通过远程连接监视远程的服务器VM。
jmap:一个可以输出所有内存中对象的工具,甚至可以将VM中的heap,以二进制输出成文本。用法:jmap -histo pid。如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=String 3024可以将3024进程的内存heap输出出来到String文件里。
jinfo: 用处比较简单,就是能输出并修改运行时的java进程的运行参数。用法:jinfo -opt pid 例如查看2788的MaxPerm大小:jinfo -flag MaxPermSize 2788。
jconsole:一个用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。用法:直接输入jconsole即可。