我是jetty的新手,并且已经开始在OSGi框架中作为嵌入式服务器使用它。最近,我观察到几个“破管”和“文件结束”异常。
Caused by: org.eclipse.jetty.io.EofException
at org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:911)[80:org.eclipse.jetty.http:7.4.1.v20110513]
at org.eclipse.jetty.server.HttpConnection.flushResponse(HttpConnection.java:753)[82:org.eclipse.jetty.server:7.4.1.v20110513]
at org.eclipse.jetty.server.HttpConnection$Output.close(HttpConnection.java:1124)[82:org.eclipse.jetty.server:7.4.1.v20110513]
at org.apache.cxf.transport.http.AbstractHTTPDestination$WrappedOutputStream.close(AbstractHTTPDestination.java:606)[96:org.apache.cxf.bundle:2.4.0.fuse-00-27]
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)[96:org.apache.cxf.bundle:2.4.0.fuse-00-27]
at org.apache.cxf.transport.http.AbstractHTTPDestination$BackChannelConduit.close(AbstractHTTPDestination.java:549)[96:org.apache.cxf.bundle:2.4.0.fuse-00-27]
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)[96:org.apache.cxf.bundle:2.4.0.fuse-00-27]
... 36 more
Caused by: java.io.IOException: Broken pipe
at sun.nio.ch.FileDispatcher.write0(Native Method)[:1.6.0_14]
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:29)[:1.6.0_14]
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:104)[:1.6.0_14]
at sun.nio.ch.IOUtil.write(IOUtil.java:60)[:1.6.0_14]
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:334)[:1.6.0_14]
at org.eclipse.jetty.io.nio.ChannelEndPoint.flush(ChannelEndPoint.java:240)[84:org.eclipse.jetty.io:7.4.1.v20110513]
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.flush(SelectChannelEndPoint.java:282)[84:org.eclipse.jetty.io:7.4.1.v20110513]
at org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:855)[80:org.eclipse.jetty.http:7.4.1.v20110513]
最初,我提出了linux“ulimit”但它没有完全解决这个问题,除了错误的频率。服务器的当前负载大约为500个请求/秒。我当前的jetty.xml是最低限度的,并没有指定任何线程池或接受器值。只是想知道,如果不正确的配置导致问题导致码头拒绝连接。这就是我的意思。
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="port"><Property name="jetty.port" default="8010"/></Set>
<Set name="maxIdleTime">20000</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">8443</Set>
<Set name="lowResourcesConnections">20000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
</New>
</Arg>
我不确定jetty默认值是什么用于接受器或线程池。我查看了文档但未找到任何相关内容。
我尝试添加线程池但遇到了同样的问题。这是线程池条目:
<Set name="ThreadPool">
<New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
<Set name="minThreads">30</Set>
<Set name="maxThreads">3000</Set>
</New>
</Set>
如果有人可以提供有关此问题的提示,我将不胜感激。我正在运行码头版本7.
由于
答案 0 :(得分:3)
BrokenPipe和EofException是网络环境中许多变化的结果。
例如修复SSL半封闭漏洞,甚至从移动终端(笔记本电脑,平板电脑,手机)中越来越多地使用网络也会加剧这个问题。
你正在使用的跳码版本7.4.1还没有降低这些条件的噪音(大多数是无害的,但只是在一小部分情况下。例如客户说明“连接:保持活着”,但随后在仅执行1个完整请求/响应事务后关闭连接)
从jetty 7.6.0(目前在7.6.0.RC3)开始,过滤掉了已知无害条件下这些异常的噪音。