2016-08-11 133 views
0

我们对我们的应用程序使用WebSphere应用程序服务器,并且经常发生内存不足错误。为了调试这个,我们添加了日志来检查在某些地方使用过的内存,下面是观察结果。WebSphere内存不足错误

使用的内存不会减少,直到达到阈值限制。我们使用下面的内存配置:

InitialHeapSize="1024" maximumHeapSize="2048" 

因此,直到它跨越1024内存不释放。在OOM错误的情况下,即使某些线程未被使用,内存也不会被释放。

我认为堆大小没有被释放。但是,Java运行时API显示有可用内存。像方法类,字符串操作这样的Java操作正在工作,但是当JNDI查找出现内存异常时,它的失败。结果,由于连接不可用,系统失败。

堆栈跟踪:

com.ibm.websphere.naming.CannotInstantiateObjectException:当JNDI NamingManager正在处理一个javax.naming.Reference中对象时发生异常。 [根异常是java.lang.OutOfMemoryError] at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:1033) at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookup(Helpers。 java:730)

+0

[java.lang.OutOfMemoryError:Java堆空间]的可能重复(http://stackoverflow.com/questions/1596009/java-lang-outofmemoryerror-java-heap-space) –

回答

1

Dynamo,您将不得不执行堆分析以找出导致您的OOM的原因。这是一个免费的工具,可以让你找出在服务器中导致问题的原因。可能是一个流氓应用程序阻止太多的内存或资源泄漏太多的内存等。

你可以看看这个了解更多信息。你的初始堆和最大堆的设置为你想要的东西调整(如果你有太深的GC,你的CPU将GC在非常高VS恒定的开销使用问题,如果过于频繁)

https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091

1

您必须透过wasadminHeap DumpThread Dump和分析问题的根源

0

会有因平台和版本您使用的一些差异,但是,有内置支持产生堆转储:

见,例如:

http://www.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/tprf_enablingheapdump.html

一般情况下,你要么要启用代堆转储,那么强制OOM,然后用HeapAnalyzer来分析所产生的堆转储。或者,可以在看到大量内存使用情况时手动生成堆。

一些警告:看起来像内存泄漏可能是一个非常大但瞬时内存使用。随着时间的推移,内存使用情况的视图将需要得出存在实际泄漏的结论。

无论如何,处理这类问题的途径不可避免地会导致产生堆转储和分析。