java.lang.OutOfMemoryError:allocLargeObjectOrArray:[B,大小为4K

时间:2015-11-18 10:18:01

标签: java weblogic

由于内存不足错误导致应用程序中断。在检查Weblogic日志时,我得到以下异常。应该怎么做才能避免这种情况?

java.lang.OutOfMemoryError: getNewTla

java.lang.OutOfMemoryError: allocLargeObjectOrArray: [B, size 4K.
java.lang.OutOfMemoryError: allocLargeObjectOrArray: [B, size 4K.

at weblogic.utils.io.Chunk.<init>(Chunk.java:293)
at weblogic.utils.io.Chunk.getChunk(Chunk.java:141)
at weblogic.servlet.internal.ChunkOutput.<init>(ChunkOutput.java:112)
at weblogic.servlet.internal.ChunkOutput.create(ChunkOutput.java:156)
at weblogic.servlet.internal.ServletOutputStreamImpl.<init>(ServletOutputStreamImpl.java:92)
at weblogic.servlet.internal.ServletResponseImpl.<init>(ServletResponseImpl.java:155)
at weblogic.servlet.internal.MuxableSocketHTTP.<init>(MuxableSocketHTTP.java:111)
at weblogic.servlet.internal.ProtocolHandlerHTTP.createSocket(ProtocolHandlerHTTP.java:65)
at weblogic.socket.MuxableSocketDiscriminator.dispatch(MuxableSocketDiscriminator.java:131)
at weblogic.socket.SocketMuxer.readReadySocketOnce(SocketMuxer.java:901)
at weblogic.socket.SocketMuxer.readReadySocket(SocketMuxer.java:840)
at weblogic.socket.EPollSocketMuxer.dataReceived(EPollSocketMuxer.java:215)
at weblogic.socket.EPollSocketMuxer.processSockets(EPollSocketMuxer.java:177)
at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29)
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:42)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)

3 个答案:

答案 0 :(得分:1)

您的应用程序存在内存泄漏。

您必须找到它并执行所需的更改。

我通常使用JProfiler来查找内存泄漏,但是有很多工具可以帮助你。

观看此视频:Find a memory leak using JProfiler

答案 1 :(得分:0)

正如@jfcorugedo所提到的,它可能是由于内存泄漏,或者只是运行的内存远远少于应用程序需要的内存(只是尝试增加堆并运行)。首先看一下你的GC日志。如果你已经进行了内存转储,你也可以使用像MAT这样的工具

答案 2 :(得分:0)

如果您在JRockit上运行Web逻辑,则可以使用以下命令获取有关堆的一些信息:

  1. 查找运行Web应用程序的Web逻辑节点的pid。
  2. 转到jrockit lib目录。
  3. 获取堆摘要的命令: jrcmd {pid} heap_diagnostics
  4. 生成heapdump(hprof)的命令: jrcmd {pid} hprofdump filename = {filename} .hprof
  5. 如上面的评论中所述,您可以开始使用MAT(IBM内存分析器)检查堆转储以查找内存泄漏。最好的方法是在应用程序包/类上使用过滤器检查直方图。查找异常多的应用程序类实例。