Java OutOfMemoryError:jetty websocket中的32位直接缓冲内存
我编写了一个应用程序,它使用jetty websocket连接到websocket服务器。当使用JDK 1.8.0(64位)时,一切似乎都很好,但当切换到JDK 1.8.0(32位)时,我会遇到以下错误:Java OutOfMemoryError:jetty websocket中的32位直接缓冲内存,java,websocket,jetty,32bit-64bit,bytebuffer,Java,Websocket,Jetty,32bit 64bit,Bytebuffer,我编写了一个应用程序,它使用jetty websocket连接到websocket服务器。当使用JDK 1.8.0(64位)时,一切似乎都很好,但当切换到JDK 1.8.0(32位)时,我会遇到以下错误: java.lang.OutOfMemoryError: Direct buffer memory at java.nio.Bits.reserveMemory(Bits.java:693) at java.nio.DirectByteBuffer.<init>(Dire
java.lang.OutOfMemoryError: Direct buffer memory
at java.nio.Bits.reserveMemory(Bits.java:693)
at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123)
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
at org.eclipse.jetty.util.BufferUtil.allocateDirect(BufferUtil.java:133)
at org.eclipse.jetty.io.ByteBufferPool.newByteBuffer(ByteBufferPool.java:61)
at org.eclipse.jetty.io.MappedByteBufferPool.acquire(MappedByteBufferPool.java:67)
at org.eclipse.jetty.websocket.common.io.FrameFlusher$Flusher.batch(FrameFlusher.java:65)
java.lang.OutOfMemoryError:直接缓冲内存
位于java.nio.Bits.reserveMemory(Bits.java:693)
位于java.nio.DirectByteBuffer。(DirectByteBuffer.java:123)
位于java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
位于org.eclipse.jetty.util.BufferUtil.allocateDirect(BufferUtil.java:133)
位于org.eclipse.jetty.io.ByteBufferPool.newByteBuffer(ByteBufferPool.java:61)
位于org.eclipse.jetty.io.MappedByteBufferPool.acquire(MappedByteBufferPool.java:67)
位于org.eclipse.jetty.websocket.common.io.FrameFlusher$Flusher.batch(FrameFlusher.java:65)
我认为这与32位无法处理请求的字节缓冲区大小有关
因此,最简单的解决方案是切换到64位,但我们有很多客户使用32位系统:有更简单的解决方案吗
我已经尝试使用各种参数更改JVM设置
但是没有任何帮助。我发现了问题:我将连接/连接的缓冲区大小设置得太高,因为我还传输文件。我将其设置为1024*1024*1024,这意味着1GB 我把它改为50MB(比我需要的多),它可以正常工作
session.getPolicy().setMaxBinaryMessageBufferSize(BUFFER_SIZE);
session.getPolicy().setMaxBinaryMessageSize(BUFFER_SIZE);
session.getPolicy().setMaxTextMessageBufferSize(BUFFER_SIZE);
session.getPolicy().setMaxTextMessageSize(BUFFER_SIZE);