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即可。