优化是个大问题啊,这两天开始研究了一下,在jdk5以后jdk就自带监视工具。
jconsole
这个工具就可以监视着你所连接的服务的大概的情况。(在window下dos直接输入jconsole就可以启动,linux下还没有实验)
启动后就会看到jconsole让你进行连接,有本地远程两种情况。然后你就可以进行查看了,里面有概述,内存线程,类等信息你可以参考。期中线程在最喜爱按有个检测死锁的功能哦(里面还有一些设置暂时还没有研究)
但是如果诊断具体问题比如说具体那个类引起了内存泄露则可能需要下面的命令
jmap 使用命令是 jmap -histo <pid> 该命令可以打印出该pid下的所有对象以及创建的数量。如果你看到自己的类排在了前面这可是个不太友好的信号哦。
除了jmap外还有个jhat命令不过这是jdk6之后才有的哦,这个命令感觉只是对jmap在web服务上增强了一下而已。
在使用jhat命令之前需要jmap的支持,jmap -dump:file=<file> <pid>该命令是将该pid下的信息生成jvm的二进制转储。如果怀疑内存泄露可以加上-XX:+HeapDumpOnOutOfMemoyError命令启动。
现在就剩下要查看该堆内容的时候了。可以使用jhat <file>启动也就是刚才jmap生成的那个文件,由于jhat比较占用空间,可以添加-J-Xmx384m命令启动jhat。然后你就会看到一些信息并登陆相关站点了,比如我是看的我的tomcat,输出信息是
Reading from dump.bin...
Dump file created Tue Nov 29 12:06:15 CST 2011
Snapshot read, resolving...
Resolving 145970 objects...
Chasing references, expect 29 dots.............................
Eliminating duplicate references.............................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
则访问我的tomcat7000端口就可以查看信息了
jconsole
这个工具就可以监视着你所连接的服务的大概的情况。(在window下dos直接输入jconsole就可以启动,linux下还没有实验)
启动后就会看到jconsole让你进行连接,有本地远程两种情况。然后你就可以进行查看了,里面有概述,内存线程,类等信息你可以参考。期中线程在最喜爱按有个检测死锁的功能哦(里面还有一些设置暂时还没有研究)
但是如果诊断具体问题比如说具体那个类引起了内存泄露则可能需要下面的命令
jmap 使用命令是 jmap -histo <pid> 该命令可以打印出该pid下的所有对象以及创建的数量。如果你看到自己的类排在了前面这可是个不太友好的信号哦。
除了jmap外还有个jhat命令不过这是jdk6之后才有的哦,这个命令感觉只是对jmap在web服务上增强了一下而已。
在使用jhat命令之前需要jmap的支持,jmap -dump:file=<file> <pid>该命令是将该pid下的信息生成jvm的二进制转储。如果怀疑内存泄露可以加上-XX:+HeapDumpOnOutOfMemoyError命令启动。
现在就剩下要查看该堆内容的时候了。可以使用jhat <file>启动也就是刚才jmap生成的那个文件,由于jhat比较占用空间,可以添加-J-Xmx384m命令启动jhat。然后你就会看到一些信息并登陆相关站点了,比如我是看的我的tomcat,输出信息是
Reading from dump.bin...
Dump file created Tue Nov 29 12:06:15 CST 2011
Snapshot read, resolving...
Resolving 145970 objects...
Chasing references, expect 29 dots.............................
Eliminating duplicate references.............................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
则访问我的tomcat7000端口就可以查看信息了