Wildfly 8.1に大きなファイル(400mb +)をアップロードしようとするとIOExceptionが発生しますが、jboss 7サーバーを使用しているときに同じ条件で例外が発生しません。
例外:
Blocking request failed HttpServerExchange{ POST /ehub/contentstore/categories/maincategory/file/create}: Java.lang.RuntimeException: Java.io.IOException: Broken pipe
at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.Java:527)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.Java:287)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.Java:227)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.Java:73)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.Java:146)
at io.undertow.server.Connectors.executeRootHandler(Connectors.Java:177)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.Java:727)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1145) [rt.jar:1.7.0_51]
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:615) [rt.jar:1.7.0_51]
at Java.lang.Thread.run(Thread.Java:744) [rt.jar:1.7.0_51]
Caused by: Java.io.IOException: Broken pipe
at Sun.nio.ch.FileDispatcherImpl.write0(Native Method) [rt.jar:1.7.0_51]
at Sun.nio.ch.SocketDispatcher.write(SocketDispatcher.Java:47) [rt.jar:1.7.0_51]
at Sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.Java:93) [rt.jar:1.7.0_51]
at Sun.nio.ch.IOUtil.write(IOUtil.Java:51) [rt.jar:1.7.0_51]
at Sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.Java:487) [rt.jar:1.7.0_51]
at org.xnio.nio.NioSocketConduit.write(NioSocketConduit.Java:150) [xnio-nio-3.2.2.Final.jar:3.2.2.Final]
at io.undertow.server.protocol.http.HttpResponseConduit.processWrite(HttpResponseConduit.Java:212)
at io.undertow.server.protocol.http.HttpResponseConduit.flush(HttpResponseConduit.Java:629)
at io.undertow.conduits.FinishableStreamSinkConduit.flush(FinishableStreamSinkConduit.Java:83)
at org.xnio.conduits.ConduitStreamSinkChannel.flush(ConduitStreamSinkChannel.Java:162) [xnio-api-3.2.2.Final.jar:3.2.2.Final]
at io.undertow.channels.DetachableStreamSinkChannel.flush(DetachableStreamSinkChannel.Java:100)
at org.xnio.channels.Channels.flushBlocking(Channels.Java:63) [xnio-api-3.2.2.Final.jar:3.2.2.Final]
at io.undertow.servlet.spec.ServletOutputStreamImpl.close(ServletOutputStreamImpl.Java:625)
at io.undertow.servlet.spec.HttpServletResponseImpl.closeStreamAndWriter(HttpServletResponseImpl.Java:451)
at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.Java:525)
Max-post-sizeを増やしましたが、うまくいきませんでした。
standalone.xml:
<subsystem xmlns="urn:jboss:domain:undertow:1.1">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" max-post-size="974247881"/>
<Host name="default-Host" alias="localhost">
<location name="/" handler="welcome-content"/>
<filter-ref name="server-header"/>
<filter-ref name="x-powered-by-header"/>
</Host>
</server>
<servlet-container name="default">
<jsp-config/>
</servlet-container>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
</handlers>
<filters>
<response-header name="server-header" header-name="Server" header-value="WildFly/8"/>
<response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
</filters>
</subsystem>
これに対する解決策を見つけました。これと同じ問題があり、解決しました。他の人を助けるかもしれません。
より多くのhttp要求ヘッダーサイズを許可するには、jbossまたはwildflyのstandalone.xmlファイルを変更する必要があります。
Max-header-size属性をデフォルトサーバーに追加し、サーバーを再起動してStandalone.confが機能するようにします
<subsystem xmlns="urn:jboss:domain:undertow:1.1">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" max-header-size="974247881"/>
<Host name="default-Host" alias="localhost">
<location name="/" handler="welcome-content"/>
<filter-ref name="server-header"/>
<filter-ref name="x-powered-by-header"/>
</Host>
</server>
...
</subsystem>
「standalone.conf」ファイルにはありません。これは、「standalone/configuration」フォルダーにある「standalone.xml」ファイルです。 max-post-sizeを変更します:
<http-listener name="default" socket-binding="http" redirect-socket="https" max-post-size="104857600"/>
<Host name="default-Host" alias="localhost">
jbossのこのリンクを参照してください: https://issues.jboss.org/browse/UNDERTOW-185
../wildfly/stanadalone/configuration/standalone.xmlのmax-post-sizeが設定されます。
あなたのワイルドフライがウェブサーバーの背後に立っている場合、e.q。 nginx、そこに制限を設定する必要があるかもしれません。これは私を助けました。