Политика повторного использования рабочего потока для запросов в Tomcat 6 - PullRequest
1 голос
/ 07 июля 2011

Я пытался найти некоторую документацию о политике повторного использования рабочих потоков на веб-серверах, особенно tomcat 6, но не смог ничего найти, поэтому доводил это до сведения экспертов!

Насколько я понимаю, веб-сервериспользует пул рабочих потоков для обслуживания http-запросов.

В нашем приложении мы сохраняем некоторую информацию на карте, ключом которой является текущий поток (что-то вроде способа сделать поток локальным).

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

После обнаружения этой проблемы яЯ на самом деле запутался в сценарии с другой стороны.Для нас мы видели, как этот код работает 80% случаев, то есть получается рабочий поток, который корректно очищает данные.

Я не совсем понимаю, почему это работает?Может ли кто-то со знанием о внутренностях контейнера сервлета пролить свет на это?

1 Ответ

2 голосов
/ 08 июля 2011

Начиная с версии 6 пул потоков Tomcat совместно используется различными компонентами: http://tomcat.apache.org/tomcat-6.0-doc/config/executor.html

Соединитель HTTP определяет максимальное количество потоков, доступных для соединителя: http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

Для обоих параметров по умолчанию установлено значение200.

Если у вас сегодня рейтинг попаданий + -80%, я полагаю, что ваше приложение не находится под большой нагрузкой в ​​течение 80% времени.Например, в среднем Tomcat использует только 1,5 различных потока из пула.Я понятия не имею, что может произойти, если вы активируете обработку запроса асинхронного ввода-вывода (AIO).Рекомендация: перейти на ThreadLocal или другое, например, решение на основе сеанса.

...