Java的监控与性能调优工具很多,除了JDK自带的一些工具外,还有像Jprofilerz这样非常好用的商业工具。下面对JDK自带的一些工具做个简要说明,以便需要时找到最合适的工具。
JProfiler在java程序性能调试方面是翘楚,无须赘言,参见:《Jprofiler6的安装与使用说明》。
下面为JDK自带的一些工具:
所有工具都在JDK的bin目录,而在这些工具中,除jvisualvm与jconsole为GUI图形化,其他均为命令行。
jps:
jvisualvm:可监控、性能评估、故障诊断主机上所有java进程的cpu,内存,线程使用情况。
jinfo:可以输出并修改运行时的java进程的opts。
jstat:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jstat -class pid
jstat -compiler pid
jstat -gc pid
jstat -gccapacity pid
jstat -gcnew pid
jstat -gcnewcapacity pid
jstat -gcold pid
jstat -gcoldcapacity pid
jstat -gcpermcapacity pid
jstat -util pid
jstat -printcompilation pid
除了以上参数外,后面还可以附加两个数字参数,如: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:
jconsole:一个用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。用法:直接输入jconsole即可。