Какая конфигурация jetty.xml идеальна, чтобы избежать исключения "Broken Pipe" или "EofException"? - PullRequest
1 голос
/ 04 января 2012

Я новичок в Jetty и начал использовать его месяц назад как встроенный сервер в среде OSGi.В последнее время я наблюдаю несколько исключений "Broken Pipe" и "End of File".

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 Ответ

3 голосов
/ 10 января 2012

BrokenPipe и EofException являются результатом многих изменений в веб-ландшафте.

Например, исправления для уязвимости SSL Half Close и даже растущее использование Интернета с мобильных конечных точек (ноутбуков, планшетов, мобильных телефонов), которые также усугубляют эту проблему.

Версия Jetty, которую вы используете 7.4.1, еще не имеет шумоподавления для этих условий (в основном безвредных, но только при небольшом количестве обстоятельств. Например, клиент указывает «Connection: keep-alive», но закрытие соединения после выполнения только 1 полной транзакции запроса / ответа)

Начиная со пристани 7.6.0 (в настоящее время - 7.6.0.RC3), шум от этих исключений во время известных безвредных условий отфильтровывается.

...