SimpleFramework:OutOfMemoryError:直接缓冲内存

时间:2014-08-27 17:41:27

标签: out-of-memory bytebuffer simple-framework

我正在使用simpleframework来实现一个HTTP服务器,除其他外,它处理大图像(4m到8m)。

我注意到一段时间后,应用程序抛出OutOfMemory异常并停止处理进一步的请求。 使用jconsole,我看到直接内存增加了,但它永远不会被释放。引发的异常是:

2014/08/27 17:30:28 | Exception in thread "Dispatcher: Thread-17" java.lang.OutOfMemoryError: Direct buffer memory
2014/08/27 17:30:28 |   at java.nio.Bits.reserveMemory(Unknown Source)
2014/08/27 17:30:28 |   at java.nio.DirectByteBuffer.<init>(Unknown Source)
2014/08/27 17:30:28 |   at java.nio.ByteBuffer.allocateDirect(Unknown Source)
2014/08/27 17:30:28 |   at sun.nio.ch.Util.getTemporaryDirectBuffer(Unknown Source)
2014/08/27 17:30:28 |   at sun.nio.ch.IOUtil.write(Unknown Source)
2014/08/27 17:30:28 |   at sun.nio.ch.SocketChannelImpl.write(Unknown Source)
2014/08/27 17:30:28 |   at org.simpleframework.transport.BufferWrapper.write(BufferWrapper.java:356)

我尝试将直接内存大小(-XX:MaxDirectMemorySize)增加到800米,但它只延迟了OutOfMemory异常。

有人有这个问题吗?有什么办法可以解除分配这段记忆吗?

我在Windows Server 2003 x64盒子上使用最新版本的simpleframework(5.1.6)。

致以最诚挚的问候,

TelmoSimões

2 个答案:

答案 0 :(得分:0)

您可能会在6.0版本中获得更好的运气。它尚未正式发布,但最终发布时API不太可能发生太大变化。此外,还对输出缓冲区的内存分配进行了重新设计。它还支持开箱即用的WebSockets。

https://github.com/ngallagher/simpleframework

答案 1 :(得分:-1)

OOM异常可能有很多原因。原因需要详细分析。堆转储会有所帮助。在OOM异常上为堆转储添加VM参数。还要尝试增加堆大小,然后再试一次。