我有一个在Weblogic 10.3上运行的J2EE struts应用程序,它有明显严重的内存问题。 我的公司不会购买像Jprobe这样的第三方工具,所以我唯一的选择就是使用免费提供的工具。我已启用gc日志并观察到内存消耗非常高,从而触发频繁的gc循环。现在我正在我的机器上配置JAM console / JADE以捕获内存快照,以查看应用程序的哪个部分行为不端。有没有其他更好的方法来解决这个问题。有许多小的最佳实践可以提高内存使用率,但对于旧的胖版本应用程序来说,它们看起来太多了。
任何建议都非常感谢。
答案 0 :(得分:4)
在堆转储分析方面,VisualVM是一个很好的工具,可用于解决内存泄漏问题。但就功能而言,Eclipse Memory Analyzer(之前称为SAP内存分析器,之后被SAP捐赠给Eclipse基金会)绝对比VisualVM高出一步。说真的,我不是一般的SAP软件的忠实粉丝,但他们用这个工具做的真的很棒,Eclipse MAT对我来说是堆转储分析的事实上的选择。
因为我使用它,找到贪吃的记忆猪从未如此简单(它甚至有一个“泄漏嫌疑人”探测器,效果很好)。
有关详细信息和方法,我热烈推荐超级精彩的博文How to Fix Memory Leaks in Java。对于Eclipse MAT特定资源,请查看非常轻的tutorial,Eclipse Memory Analyzer, 10 useful tips/articles以获取更高级的提示或“官方”Memory Analyzer Webinar。
答案 1 :(得分:2)
您可以使用VisualVM Memory Profiling。 VisualVM附带了最新的JDK 1.6版本。
答案 2 :(得分:1)
只需获得open source Java profiler并重新测试。
我至少可以说,webapp中最常见的内存效率错误是将HttpSession
滥用为数据存储的副本,并使用byte[totalSize]
代替缓冲流来管理来自数据库的数据一到另一边。只需仔细查看代码或让经验丰富的开发人员查看代码即可。