2014-08-27 153 views
1

我正在使用simpleframework實現一個HTTP服務器,其中包含處理大型圖像(4m到8m)的HTTP服務器。SimpleFramework:OutOfMemoryError:直接緩衝區內存

我注意到一段時間後,應用程序拋出一個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米,但它只是推遲了內存不足的異常。

有沒有人有這個問題?有沒有什麼可以解除分配這個內存?

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

最好的問候,

聖特爾莫西蒙斯

回答

-1

OOM異常可能有許多原因。需要詳細分析原因。堆轉儲將有所幫助。爲OOM異常上的堆轉儲添加VM參數。同時嘗試增加堆大小並重試。

0

使用6.0版本可能會有更好的運氣。它沒有正式發佈,但是它在最終發佈時不太可能發生太大的變化。此外,對輸出緩衝區的內存分配進行了重新設計。它也支持開箱即用的WebSockets。

https://github.com/ngallagher/simpleframework

+0

謝謝您的輸入。我嘗試了最新版本,但問題仍然存在(執行SocketBuffer.flush(...)時拋出異常)。還有什麼可以幫助解決這個錯誤? – 2014-08-29 14:09:17

+0

簡單移動到github? – ollo 2014-09-04 11:47:57