我们对我们的应用程序使用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)
[java.lang.OutOfMemoryError:Java堆空间]的可能重复(http://stackoverflow.com/questions/1596009/java-lang-outofmemoryerror-java-heap-space) –