]
Carlos Rodríguez Aguado commented on WFLY-4696:
-----------------------------------------------
I suppose that you are referring to the parameter buffer-size that can be customized in io
subsystem:
<subsystem xmlns="urn:jboss:domain:io:1.1">
<worker name="default"/>
<buffer-pool name="default"
{color:red}buffer-size="value"{color}/>
</subsystem>
With the default value (we read that is 16384) the problem is reproduced. We tried to
decrease the value to 8192 but the effect was exactly the same. Must we increase it to
32768 or 65536?
The protocol is https.
OutOfMemory DirectByteBuffer XNIO
---------------------------------
Key: WFLY-4696
URL:
https://issues.jboss.org/browse/WFLY-4696
Project: WildFly
Issue Type: Bug
Components: IO, Web (Undertow)
Affects Versions: 8.1.0.Final, 8.2.0.Final
Reporter: Carlos Rodríguez Aguado
Assignee: Stuart Douglas
Priority: Blocker
I get this errors constantly in my server when a web connection is interrupted from the
browser for instance:
11:50:45,301 ERROR [stderr] (default task-339) Exception in thread "default
task-339" java.nio.BufferOverflowException
11:50:45,301 ERROR [stderr] (default task-339) at
java.nio.DirectByteBuffer.put(DirectByteBuffer.java:363)
11:50:45,301 ERROR [stderr] (default task-339) at
java.nio.ByteBuffer.put(ByteBuffer.java:859)
11:50:45,301 ERROR [stderr] (default task-339) at
io.undertow.util.HttpString.appendTo(HttpString.java:204)
11:50:45,301 ERROR [stderr] (default task-339) at
io.undertow.server.protocol.http.HttpResponseConduit.processWrite(HttpResponseConduit.java:150)
11:50:45,301 ERROR [stderr] (default task-339) at
io.undertow.server.protocol.http.HttpResponseConduit.flush(HttpResponseConduit.java:629)
11:50:45,301 ERROR [stderr] (default task-339) at
io.undertow.conduits.AbstractFixedLengthStreamSinkConduit.flush(AbstractFixedLengthStreamSinkConduit.java:205)
11:50:45,301 ERROR [stderr] (default task-339) at
org.xnio.conduits.ConduitStreamSinkChannel.flush(ConduitStreamSinkChannel.java:162)
11:50:45,301 ERROR [stderr] (default task-339) at
io.undertow.channels.DetachableStreamSinkChannel.flush(DetachableStreamSinkChannel.java:100)
11:50:45,301 ERROR [stderr] (default task-339) at
io.undertow.server.HttpServerExchange.closeAndFlushResponse(HttpServerExchange.java:1489)
11:50:45,317 ERROR [stderr] (default task-339) at
io.undertow.server.HttpServerExchange.endExchange(HttpServerExchange.java:1470)
11:50:45,317 ERROR [stderr] (default task-339) at
io.undertow.server.Connectors.executeRootHandler(Connectors.java:201)
11:50:45,317 ERROR [stderr] (default task-339) at
io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:727)
11:50:45,317 ERROR [stderr] (default task-339) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
11:50:45,317 ERROR [stderr] (default task-339) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
11:50:45,317 ERROR [stderr] (default task-339) at java.lang.Thread.run(Thread.java:745)
And then, I think this errors lead to a OutOfMemory crash:
14:23:09,592 ERROR [org.xnio.listener] (default I/O-3) XNIO001007: A channel event
listener threw an exception: java.lang.OutOfMemoryError
at sun.misc.Unsafe.allocateMemory(Native Method) [rt.jar:1.8.0_20]
at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:127) [rt.jar:1.8.0_20]
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311) [rt.jar:1.8.0_20]
at org.xnio.BufferAllocator$2.allocate(BufferAllocator.java:57)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at org.xnio.BufferAllocator$2.allocate(BufferAllocator.java:55)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at org.xnio.ByteBufferSlicePool.allocate(ByteBufferSlicePool.java:149)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at org.xnio.ssl.JsseSslConduitEngine.<init>(JsseSslConduitEngine.java:143)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at org.xnio.ssl.JsseSslStreamConnection.<init>(JsseSslStreamConnection.java:71)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at
org.xnio.ssl.JsseAcceptingSslStreamConnection.accept(JsseAcceptingSslStreamConnection.java:45)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at
org.xnio.ssl.JsseAcceptingSslStreamConnection.accept(JsseAcceptingSslStreamConnection.java:37)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at org.xnio.ssl.AbstractAcceptingSslChannel.accept(AbstractAcceptingSslChannel.java:187)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at org.xnio.ChannelListeners$10.handleEvent(ChannelListeners.java:289)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at org.xnio.ChannelListeners$10.handleEvent(ChannelListeners.java:286)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at
org.xnio.ChannelListeners$DelegatingChannelListener.handleEvent(ChannelListeners.java:1092)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
[xnio-api-3.2.2.Final.jar:3.2.2.Final]
at org.xnio.nio.NioTcpServerHandle.handleReady(NioTcpServerHandle.java:53)
[xnio-nio-3.2.2.Final.jar:3.2.2.Final]
at org.xnio.nio.WorkerThread.run(WorkerThread.java:539)
[xnio-nio-3.2.2.Final.jar:3.2.2.Final]
I also have found that if I perform a full GC manually the server recovers, but it can
not recover by itself, by performing other types of GCs.
This is the trace for version 8.2 of WildFly:
17:17:16,957 ERROR [io.undertow.request] (default task-49) Undertow request failed
HttpServerExchange{ GET /modulab/servlet/ShowPDFReportServlet}:
java.nio.BufferOverflowException
at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:363) [rt.jar:1.8.0_20]
at java.nio.ByteBuffer.put(ByteBuffer.java:859) [rt.jar:1.8.0_20]
at io.undertow.util.HttpString.appendTo(HttpString.java:204)
at
io.undertow.server.protocol.http.HttpResponseConduit.processWrite(HttpResponseConduit.java:166)
at
io.undertow.server.protocol.http.HttpResponseConduit.write(HttpResponseConduit.java:564)
at
io.undertow.conduits.AbstractFixedLengthStreamSinkConduit.write(AbstractFixedLengthStreamSinkConduit.java:106)
at org.xnio.conduits.Conduits.writeFinalBasic(Conduits.java:132)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at
io.undertow.conduits.AbstractFixedLengthStreamSinkConduit.writeFinal(AbstractFixedLengthStreamSinkConduit.java:175)
at
org.xnio.conduits.ConduitStreamSinkChannel.writeFinal(ConduitStreamSinkChannel.java:104)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at
io.undertow.channels.DetachableStreamSinkChannel.writeFinal(DetachableStreamSinkChannel.java:194)
at
io.undertow.server.HttpServerExchange$WriteDispatchChannel.writeFinal(HttpServerExchange.java:1829)
at
io.undertow.servlet.spec.ServletOutputStreamImpl.writeBufferBlocking(ServletOutputStreamImpl.java:565)
at
io.undertow.servlet.spec.ServletOutputStreamImpl.close(ServletOutputStreamImpl.java:600)
at
io.undertow.servlet.spec.HttpServletResponseImpl.closeStreamAndWriter(HttpServletResponseImpl.java:497)
at
io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.java:581)
at
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:308)
at
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247)
at
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76)
at
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[rt.jar:1.8.0_20]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[rt.jar:1.8.0_20]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_20]
10:57:12,389 ERROR [org.xnio.listener] (default I/O-4) XNIO001007: A channel event
listener threw an exception: java.lang.OutOfMemoryError
at sun.misc.Unsafe.allocateMemory(Native Method) [rt.jar:1.8.0_20]
at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:127) [rt.jar:1.8.0_20]
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311) [rt.jar:1.8.0_20]
at org.xnio.BufferAllocator$2.allocate(BufferAllocator.java:57)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at org.xnio.BufferAllocator$2.allocate(BufferAllocator.java:55)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at org.xnio.ByteBufferSlicePool.allocate(ByteBufferSlicePool.java:143)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at org.xnio.ssl.JsseSslConduitEngine.<init>(JsseSslConduitEngine.java:146)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at org.xnio.ssl.JsseSslStreamConnection.<init>(JsseSslStreamConnection.java:71)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at
org.xnio.ssl.JsseAcceptingSslStreamConnection.accept(JsseAcceptingSslStreamConnection.java:45)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at
org.xnio.ssl.JsseAcceptingSslStreamConnection.accept(JsseAcceptingSslStreamConnection.java:37)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at org.xnio.ssl.AbstractAcceptingSslChannel.accept(AbstractAcceptingSslChannel.java:187)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at org.xnio.ChannelListeners$10.handleEvent(ChannelListeners.java:289)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at org.xnio.ChannelListeners$10.handleEvent(ChannelListeners.java:286)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at
org.xnio.ChannelListeners$DelegatingChannelListener.handleEvent(ChannelListeners.java:1092)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
[xnio-api-3.3.0.Final.jar:3.3.0.Final]
at org.xnio.nio.NioTcpServerHandle.handleReady(NioTcpServerHandle.java:53)
[xnio-nio-3.3.0.Final.jar:3.3.0.Final]
at org.xnio.nio.WorkerThread.run(WorkerThread.java:539)
[xnio-nio-3.3.0.Final.jar:3.3.0.Final]