什么是理想的jetty.xml配置,以避免“Broken Pipe”或“EofException”异常?

时间:2012-01-04 18:44:30

标签: java jetty

我是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.

由于

1 个答案:

答案 0 :(得分:3)

BrokenPipe和EofException是网络环境中许多变化的结果。

例如修复SSL半封闭漏洞,甚至从移动终端(笔记本电脑,平板电脑,手机)中越来越多地使用网络也会加剧这个问题。

你正在使用的跳码版本7.4.1还没有降低这些条件的噪音(大多数是无害的,但只是在一小部分情况下。例如客户说明“连接:保持活着”,但随后在仅执行1个完整请求/响应事务后关闭连接)

从jetty 7.6.0(目前在7.6.0.RC3)开始,过滤掉了已知无害条件下这些异常的噪音。