解决Glassfish 3.1.2.2 Web服务内存泄漏问题

需积分: 0 0 下载量 17 浏览量 更新于2024-08-04 收藏 415KB DOCX 举报
"这篇技术分享主要讨论了针对Glassfish 3.1.2.2版本中Web服务出现内存泄漏问题的解决方法。在服务器运行一段时间后,AP02服务器性能下降,内存消耗异常增大(其他服务器通常不超过1GB,而AP02可以达到近3GB)。为了诊断问题,可以通过`jps -l`列出Java进程,然后使用`grep -i asmain`筛选出Glassfish应用服务器进程。接着,利用`jmap`命令将堆内存转储到文件中,并使用内存分析工具进行分析。文章推荐使用Eclipse Memory Analyzer Tool (MAT)进行深度分析,MAT可以从Eclipse官方网站下载,也可以在指定网络路径找到解压后的版本。在使用MAT时,建议修改MemoryAnalyzer.ini配置文件,增加-Xmx3g参数以分配更多内存。 在启动MAT并加载AP02服务器的heap.hprof文件后,分析结果显示ManagedBeanManagerImpl占用了1.6GB中的1.2GB内存,这非常可疑。浅层大小(shallow size)表示实例自身占用的内存大小,而保留大小(retained size)则包括实例自身及其引用的所有对象的内存大小。由于 ManagedBeanManagerImpl 的浅层大小只有56B,但保留大小高达1.2GB,这表明存在大量的对象被引用。 通过查看Dominator Tree,发现ManagedBeanManagerImpl内部有大量的OrgUserService(Web服务)实例,这可能是内存泄漏的源头。进一步搜索谷歌,找到了一个与案例相符的解决方案,文章提到的主要内容是创建了一个dummy Web服务调用来解决这个问题,但具体实现细节没有给出。 这篇技术分享提供了针对Glassfish 3.1.2.2版本Web服务内存泄漏问题的诊断步骤和初步解决思路,涉及到的关键工具包括`jps`、`jmap`和Eclipse MAT,以及如何通过这些工具来定位和分析内存问题。"