首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何释放内存?

如何释放内存?
EN

Stack Overflow用户
提问于 2010-03-24 19:56:14
回答 5查看 5.1K关注 0票数 17

我们在App服务器中遇到内存不足的错误已经有一段时间了。我们看到已使用的堆大小逐渐增加,直到最终达到可用堆的大小。这每3周发生一次,之后需要重新启动服务器以修复此问题。通过对堆转储的分析,我们发现问题出在JSP中使用的对象。

JSP对象是Appserver内存问题的真正原因吗?我们如何释放JSP对象(使用usebean或其他标记实例化的对象)?

我们有一个带有2个节点和一个IHS的集群Websphere appserver。

编辑:上面的发现基于下面使用IBM support assistant给出的heap-dump和nativestderr日志分析

本地错误日志分析:

alt text http://saregos.com/wp-content/uploads/2010/03/chart.jpg

堆转储分析:

堆转储分析显示了直接主控者(上图中hastable条目的2个级别)

最后一幅图显示,直接主控器实际上是JSP中使用的对象。

EDIT2:在http://saregos.com/?p=43上提供更多信息

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-29 15:30:27

手动触发垃圾收集并不能解决您的问题--它不会释放仍在使用的资源。

您应该使用分析工具(如jProfiler)来查找漏洞。如果使用代码将引用存储在列表或映射中,而这些列表或映射在运行时并未释放--可能是静态引用,则可能会出现问题。

票数 7
EN

Stack Overflow用户

发布于 2010-03-30 21:59:44

如果您在Sun6JVM下运行,请强烈考虑使用JDK中的jvisualvm程序来初步了解程序内部的实际情况。快照比较真的很好,可以帮助您进一步了解哪些对象会偷偷进入。

如果不选择Sun6JVM,那么请调查您拥有哪些性能分析工具。试验可以让你走得很远。

它可以是像在列表中收集的子字符串下面的巨大字符数组一样简单的东西,例如内务管理。

票数 2
EN

Stack Overflow用户

发布于 2010-03-31 18:46:23

我建议你读一读Effective Java, chapter 2。跟随它,再加上一个分析器,将帮助您识别应用程序产生内存泄漏的位置。

释放内存不是解决大量内存消耗的方法。大量的内存消耗可能是由两件事造成的:

  • 没有正确地编写代码-解决方案是正确地编写代码,这样它就不会消耗超过所需的内存-有效的Java将在这里提供帮助。
  • 应用程序只需要这么多内存。然后,您应该使用XmxXmsXX:MaxHeapSize、...

来增加虚拟机内存

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2507362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档