Tomcat 7 часто выдает java.net.SocketException: сброс соединения

Я использую Tomcat 7 и часто получаю ошибки сброса соединения,

org.apache.coyote.http11.Http11Processor - Error parsing HTTP request header

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:189)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:516)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:501)
    at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:98)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:931)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

и иногда, хотя и не часто, «Неожиданное чтение EOF в сокете»,

org.apache.coyote.http11.Http11Processor - Error parsing HTTP request header

java.io.EOFException: Unexpected EOF read on the socket
    at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:99)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:931)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

Из того, что я прочитал, кажется, что оба указывают на то, что клиент мог внезапно закрыть соединение, пока сервер его читает, что привело к сбросу и/или EOF.

Есть ли какие-либо другие причины, о которых кто-то может думать или сталкивался. Кроме того, если оба исключения возникают из-за одной и той же проблемы, почему частота настолько различается, я получаю около 100 сбросов соединения, чтобы сказать 5 EOF.

Спасибо


person Victor    schedule 29.10.2014    source источник
comment
Если tomcat подключен к Интернету, это также может быть связано с некоторыми червями / сканерами портов, которые атакуют случайные IP-адреса. Вы можете провести расследование, проверив журнал доступа к tomcat и исходный IP-адрес. Инструменты мониторинга (nagios и другие) иногда используют плохую проверку, которая просто открывает/закрывает сокет для проверки доступности службы, это может привести к сообщениям журнала такого рода.   -  person nomoa    schedule 29.10.2014


Ответы (1)


Дальнейшие расследования и дампы Wireshark показывают, что помимо фактической нагрузки обнаруживаются еще 2 вещи: одна — балансировщик нагрузки, который выполняет регулярную проверку пульса, а другая — сценарий мониторинга сети, который снова выполняет частые эхо-запросы.

Похоже, это те, кто пингует и разрывает соединения. Итак, когда мы наблюдали за пассивным сервером, который снова находится за LB и тоже будет пинговаться сценарием мониторинга сети, но без производственной нагрузки. Он также обнаружил те же исключения, которые мы видели на активном сервере с нагрузкой. Это подтвердило приведенные выше наблюдения. Таким образом, мы можем либо игнорировать их, либо изменить сценарий мониторинга, чтобы он ждал ответов от сервера.

person Victor    schedule 03.11.2014