一个关于Undertow的错误

开发环境的Undertow下运行中发生这个错误,但进程未受影响:

  1. 2018-12-15 14:26:35
  2. [DEBUG]-[Thread: XNIO-1 task-21]-[io.undertow.servlet.spec.HttpServletResponseImpl.responseDone()]: UT005013: An IOException occurred
  3. java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
  4. at sun.nio.ch.SocketDispatcher.write0(Native Method)
  5. at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
  6. at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
  7. at sun.nio.ch.IOUtil.write(IOUtil.java:65)
  8. at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
  9. at org.xnio.nio.NioSocketConduit.write(NioSocketConduit.java:164)
  10. at io.undertow.server.protocol.http.HttpResponseConduit.write(HttpResponseConduit.java:609)
  11. at io.undertow.conduits.ChunkedStreamSinkConduit.flush(ChunkedStreamSinkConduit.java:270)
  12. at org.xnio.conduits.ConduitStreamSinkChannel.flush(ConduitStreamSinkChannel.java:162)
  13. at io.undertow.channels.DetachableStreamSinkChannel.flush(DetachableStreamSinkChannel.java:119)
  14. at org.xnio.channels.Channels.flushBlocking(Channels.java:63)
  15. at io.undertow.servlet.spec.ServletOutputStreamImpl.close(ServletOutputStreamImpl.java:618)
  16. at io.undertow.servlet.spec.HttpServletResponseImpl.closeStreamAndWriter(HttpServletResponseImpl.java:486)
  17. at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.java:575)
  18. at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:346)
  19. at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
  20. at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
  21. at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
  22. at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
  23. at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
  24. at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
  25. at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
  26. at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
  27. at io.undertow.server.Connectors.executeRootHandler(Connectors.java:360)
  28. at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
  29. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  30. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  31. at java.lang.Thread.run(Thread.java:745)

是否没什么关系?

评论区

JFinal

2018-12-15 15:14

注意看最前面的: [DEBUG]

这个是 debug 信息,不算错误。 原因主要有两种:
1:客户端在发请求的时候,当前请求还没完事,就断开连接,这种你无法控制
2:下载文件的时候,下载到一半,客户不想下载了,中断了连接,这种事情都很常见

himans

2018-12-15 19:10

了解了,谢谢James解释!提醒了我解决问题的思路,这样就知道去哪儿找了,这个异常应该就是我的拦截器redirect掉之后产生的。

JFinal

2018-12-15 19:44

生产环境日志级别调整到 warn 或者 error 即可

debug 不适合生产环境,输出太多

himans

2019-05-29 21:11

后来详细研究了前台代码,发现是pjax的timeout的问题。异常已经不出现,谢谢

热门反馈

扫码入社