Tomcat / IIS закрывает сокет после завершения ответа http - PullRequest
1 голос
/ 27 января 2009

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

Вот часть файла разъема works.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-запрос сокет закрывается (FIN отправляется на уровне TCP). Это вызывает серьезные замедления, так как приложение работает по глобальной сети. (для каждой закрытой розетки необходимо установить еще одну, что занимает 500 мс).

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

Это происходит с последней версией разъема tomcat IIS.

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

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

Ответы [ 2 ]

1 голос
/ 29 января 2009

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

До версии 1.2.27 это было поведение разъема IIS (IIS заставляет все Расширения ISAPI для реализации собственного HTTP-поддержки и IIS-коннектор не делал этого).

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

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

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

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

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

    enable_chunked_encoding=1

  3. Перезапущенный IIS.

0 голосов
/ 27 января 2009

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...