Tomcat/IIS закрывает сокет после завершения ответа http

Я использую JBoss 4.0.4 GA с Tomcat Servlet Container 5.5. У меня также есть IIS 6.0, перенаправленный на этот JBoss. (через разъем IIS tomcat, который используется в качестве фильтра ISAPI в IIS). Все работает ок, настроил рабочие как описано.

Вот кусок файла work.properties коннектора:

#
# Defining a worker named ajp13 and of type ajp13
# Note that the name and the type do not have to match.
#
worker.jboss0_ajp13.port=8009
worker.jboss0_ajp13.type=ajp13
worker.jboss0_ajp13.host=localhost
worker.jboss0_ajp13.socket_keepalive=1
worker.jboss0_ajp13.socket_timeout=300

Но при подключении к приложению через IIS (порт 80) при каждом выполненном HTTP-ответе на HTTP-запрос сокет закрывается (на TCP-уровне отправляется FIN). Это вызывает серьезные замедления, так как приложение работает через WAN. (на каждый закрытый сокет нужно было установить еще один, что занимает 500мс).

Этого не происходит при прямом подключении к веб-серверу JBoss, а также при подключении к другому виртуальному каталогу на том же экземпляре WebServer IIS (т. е. Keep-Alive в IIS также настроен).

Это происходит с последней версией соединителя tomcat IIS.

Вы не знаете, ошибка в коннекторе или проблема с моей конфигурацией?

Заранее спасибо,
Генри.


person Genry    schedule 27.01.2009    source источник


Ответы (2)


Я зарегистрировал ошибку в Bugzilla для перенаправителя tomcat IIS, и вот ответ, который у меня есть:

До версии 1.2.27 коннектор IIS вел себя именно так (IIS вынуждает все расширения ISAPI реализовывать собственную поддержку активности HTTP, а коннектор IIS этого не делает).

В версии 1.2.27 есть экспериментальная поддержка фрагментированного кодирования HTTP 1.1 во время сборки, которая должна разрешать постоянные соединения. (Я использую примерно один и тот же код в производственных системах около 4 лет, но его следует считать экспериментальным в кодовой базе JK, пока он не станет стабильным в течение некоторого времени).

Загрузите двоичный файл -chunked с одного из зеркал загрузки и прочитайте о том, как настроить кодирование фрагментов в примечаниях к выпуску 1.2.27 (необходимо получить правильную сборку и включить ее в конфигурации). Вы можете убедиться, что коннектор использует фрагментированное кодирование с включенным ведением журнала отладки, а трассировка TCP/Wireshark должна показать повторное использование соединений.

Если вы по-прежнему получаете закрытые подключения, а журналы показывают, что коннектор пытается (или должен делать) кодирование по частям, вероятно, лучше обсудить это в списке пользователей, а затем снова открыть с помощью другой трассировки Wireshark + отладки коннектора. зарегистрируйтесь, как только убедитесь, что возникла проблема.

Итак, что я сделал:

  1. Поставьте isapi_redirect.dll с поддержкой чанков.
  2. Настроил isapi_redirect.properties со следующим:

    enable_chunked_encoding=1

  3. Перезапустил ИИС.

person Genry    schedule 29.01.2009

Сокет, вероятно, закрывается IIS. Соединение между JBoss и IIS должно не зависеть от того, сохраняется HTTP-сокет или нет. Убедитесь, что IIS настроен на поддержку постоянных сокетов HTTP/1.1.

Однако вы указываете, что другой виртуальный каталог в IIS не имеет такой же проблемы. Это может быть проблема с конкретным виртуальным каталогом, в котором возникают проблемы. Однако это может быть связано с коннектором IIS/Tomcat.

Чтобы выяснить, является ли это соединителем IIS/Tomcat, попробуйте установить

worker.jboss0_ajp13.connection_pool_size=10 worker.jboss0_ajp13.connection_pool_timeout=600

чтобы увидеть, если это имеет какое-либо значение вообще. См. Документацию Tomcat Workers (включая раздел внизу "Пример рабочие.свойства"). Посмотрите, поможет ли какой-либо из упомянутых там параметров.

person Eddie    schedule 27.01.2009
comment
Как я уже сказал, при подключении к другому виртуальному каталогу на IIS (который не перенаправляется на JBoss) сокеты не закрываются, а используются повторно. Вы все еще думаете, что это что-то в IIS? - person Genry; 28.01.2009
comment
Что ж, это может быть что-то в конкретном виртуальном каталоге, в котором возникают проблемы. Но если это соединитель IIS/Tomcat, попробуйте установить worker.jboss0_ajp13.connection_pool_size=10, чтобы увидеть, имеет ли это какое-либо значение. - person Eddie; 28.01.2009
comment
Эдди, спасибо за ответ, но я уже посмотрел документацию коннектора, изучил все параметры воркера. По умолчанию для IIS connection_pool_size=10. Тем не менее, я попробовал его жестко запрограммировать, и он все еще не работает. - person Genry; 28.01.2009
comment
Что касается свойств виртуального каталога, то их нет. Только на уровне веб-сайта, который уже установлен, включите HTTP Keep-Alives. Я думаю, что это ошибка в разъеме... - person Genry; 28.01.2009
comment
Извините, я не мог помочь. Вероятно, вам следует зарегистрировать отчет об ошибке на веб-сайте Tomcat Connector и посмотреть, могут ли они помочь вам, по крайней мере, узнать, как собирать отладочную информацию. - person Eddie; 28.01.2009