在项目运行的过程中,难免会出现一些异常,尤其讨厌的就是内存异常或是内存的大量占用!
我们的项目是在tomcat 6上运行的,在网上了解过比较多的内存检测,但是当初没有尽力去看和实践。现在谨将实现过程做个日志:
1.先下载一个 MemoryAnalyzer(http://www.eclipse.org/mat/)
2.对运行的tomcat进行监控。可以通过运行jmap命令收集 监控数据,jmap是jdk自带的运行程序,应该在%JAVA_HOME%/jdk-version/bin路径下。设置好环境变量后,直接在命令窗口下输入jmap+回车,可以出现对jmap命令的参数说明:
Usage:
jmap -histo <pid>
(to connect to running process and print histogram of java object heap
jmap -dump:<dump-options> <pid>
(to connect to running process and dump java heap)
dump-options:
format=b binary default
file=<file> dump heap to <file>
Example: jmap -dump:format=b,file=heap.bin <pid>
对于 MemoryAnalyzer工具来说,它需要hprof格式的文件,所以,可以在命令窗口执行:
jmap -dump:format=b,file=heap.hprof <pid>后面的pid是指java的进程id,尽管我们使用的是tomcat但是依然是以jvm作为运行环境的(这句话有点多余!),总而言之,不要把tomcat的进程当成jvm的进程来监视就对了!
运行这个命令后会在java jdk的bin路径下生成一个 heap.hprof文件。
3.在MemoryAnalyzer中打开heap.hprof,接下来根据MemoryAnalyzer的提示来进行就可以了!
还有另外一种方法,那就是通过jconsole来查看内存的运行情况 。jconsole也是在%JAVA_HOME%/jdk-version/bin路径下。只要在命令窗口中运行,基本上就知道该如何使用了!
这里有这么一篇文章,可以看看:
http://hi.baidu.com/xuwanbest/blog/item/3f6d4c7b375ff4f10bd18731.html