简体   繁体   English

通过Jetty调用Request.getInputStream时管道损坏

[英]Broken pipe when calling Request.getInputStream over Jetty

I'm running a high volume java web-app over a jetty 9.x server (4k-5k qps). 我正在码头 9.x服务器(4k-5k qps)上运行大量Java Web应用程序。

My servlet (MyServlet.java) is simple Java class the extends HttpServlet . 我的servlet(MyServlet.java)是扩展HttpServlet简单Java类。

When getting the request object HttpServletRequest I invoke the getInputStream() method (as can be seen in the below stack) and then getting the below IOException. 当获取请求对象HttpServletRequest时,我调用getInputStream()方法(如下面的堆栈所示),然后获取下面的IOException。

I know that 'Broken pipe' means that the client closed the connection but when calculating the amount of time the request spent in the server I get ti 1ms and my client timeout is configured for much more. 我知道“管道中断”意味着客户端关闭了连接,但是在计算请求在服务器上花费的时间时,我得到了1毫秒,并且我的客户端超时配置了更多。

Could this be the result of too much load? 这可能是负载过多的结果吗? What could cause it? 是什么原因造成的? Is there some configuration in Jetty which I can play with that might affect this? 我可以使用Jetty中的某些配置来影响它吗?

org.eclipse.jetty.io.EofException
    at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:192)
    at org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:408)
    at org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:302)
    at org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:129)
    at org.eclipse.jetty.server.HttpConnection$SendCallback.process(HttpConnection.java:679)
    at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:246)
    at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:208)
    at org.eclipse.jetty.server.HttpConnection.send(HttpConnection.java:471)
    at org.eclipse.jetty.server.HttpChannel.sendResponse(HttpChannel.java:763)
    at org.eclipse.jetty.server.HttpChannel.sendResponse(HttpChannel.java:781)
    at org.eclipse.jetty.server.HttpChannel.continue100(HttpChannel.java:240)
    at org.eclipse.jetty.server.Request.getInputStream(Request.java:674)
    at com.ta.btr.web.servlet.MyServlet.handlePostRequest(MyServlet.java:162)
    at com.ta.btr.web.servlet.MyServlet.doPost(MyServlet.java:92)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
    at org.eclipse.jetty.server.Server.handle(Server.java:499)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Broken pipe
    at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
    at sun.nio.ch.IOUtil.write(IOUtil.java:65)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
    at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:170)
    ... 35 more

看来我的负载均衡器出现问题,该请求延迟导致客户端关闭连接(由于超时)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法从request.getInputStream()获取图像 - Unable to getImage from request.getInputStream() 如何多次读取 request.getInputStream() - How to read request.getInputStream() multiple times 从Grails的@Context HttpServletRequest请求中获取一个新的request.getInputStream() - get a new request.getInputStream() from @Context HttpServletRequest request in grails HTTPServlet Request.getInputStream()始终接收空白行 - HTTPServlet Request.getInputStream() always receiving blank line request.getInputStream不显示真实的字符串内容 - request.getInputStream does not show the real string content 在同一文件的request.getInputStream中接收不同的长度 - Receiving varying lengths in request.getInputStream for the same file 从BufferedReader(request.getInputStream())和request.getParameter读取servlet上的jsp数据之间的区别 - Difference between reading jsp data on servlet from BufferedReader (request.getInputStream()) and request.getParameter 什么原因导致使用Jetty Content Exchange和SSL时出现“管道中断”? - What causes “broken pipe” when using Jetty Content Exchange and SSL? 发送 Java POST 请求而不调用 getInputStream() - Sending Java POST request without calling getInputStream() 调用ClassPathResource.getInputStream()时出错 - Error when calling ClassPathResource.getInputStream()
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM