u GC日志分析:
垃圾回收日志(Verbose GC)可以帮我们断定是否发生了内存泄漏,导致JVM宕掉。要获取GC工作日志,我们可以在JVM启动的时候设置一个命令行选项-verbose:gc 或–verbosegc,在AIX机器上该选项为-verbose:gc -Xverbosegclog:gc.log。该选项可以打开一个开关追踪每次垃圾回收循环的内容(This option switches on a substantial trace of every garbage collection cycle.)。生成的详细垃圾回收日志在不同的平台,不同的发布版本上差别很大。从这些日志中,我们可以查看总的heap堆利用情况,用来判断gc是否花费很长时间,gc发生次数是否太多等。
GC日志分析工具,这里推荐使用
IBM Pattern Modeling and Analysis Tool for Java Garbage Collector
回收前和回收后没有发生多大变化,或者回收后一直呈上升趋势,那么基本可以判定发生了内存泄露
u 内存泄露持续跟踪工具
如果在上面的GC日志分析中看到内存发生了泄露,那么下一步就需要定位到底是哪个地方内存发生了泄露。首先检查所有的集合、容器对象,如是否定义了全局的对象数组、对象列表、MAP,在操作这些数组、列表的时候,是否将不用的集合里的引用置为空等。
如果通过上面无法定位,那么这里推荐一款java 系统监控分析的软件Jprofile
(jprofile官方上说支持AIX,不过我在AIX5.3运行,总是报
JVMCI158: Can't load "libjprofiler.a", because load ENOENT on shared library(s)
错误,不知道有哪位高手试成功过,请告知下)
Jprofile的使用请参考相关附件资源.
查看Jprofile分析报告,可以定位到哪个地方发生内存泄露