Tomcat отключает/уничтожает или повторно использует создание сеанса для определенных запросов

Задний план

Я использую Tomcat для обслуживания страницы .jsp, которую может вызывать балансировщик нагрузки, чтобы определить, находится ли данный сервер, на котором размещено приложение, в сети и может ли он обслуживать запросы.

.jsp просто делает запрос к данному приложению и проверяет, может ли оно ответить, отправляя соответствующий ответ балансировщику нагрузки.

Проблема в том, что каждый запрос к этому .jsp создает сеанс в Tomcat, который сохраняется в течение некоторого времени — потенциально может быть много балансировщиков нагрузки, запрашивающих эту страницу, что приводит к увеличению сеансов, потребляющих ресурсы.

Вопрос

Могу ли я настроить Tomcat для выполнения любого из следующих действий?

  • Не создавать сеанс для обработки определенных запросов
  • Повторное использование одного сеанса или уже созданного сеанса для обработки определенных запросов.
  • Немедленно уничтожьте сеанс, созданный для определенных запросов, или дайте указанному сеансу очень маленькое время жизни.

Под конкретными запросами я подразумеваю .jsp, который я хочу обслуживать от Tomcat.

Я использую Томкэт 7.

Любая помощь приветствуется!


person The_Neo    schedule 08.06.2018    source источник
comment
поэтому, после еще нескольких копаний (и более подробного прочтения вопроса о том, как работает tomcat), решение, которое работает для моей ситуации, - это вызвать session.invalidate() в файле .jsp, что намного проще, чем я думал (я новичок к конфигурации tomcat)> Тем не менее, вопросы все еще остаются, если есть способ повторно использовать сеанс или не создавать его для конкретных запросов, которые было бы здорово увидеть (если это возможно)   -  person The_Neo    schedule 08.06.2018
comment
Кристофер дал совершенно правильный ответ на письма вашего вопроса. Я хотел бы добавить вопрос: Вы определили это требование дополнительной памяти как проблему? Для меня это очень похоже на предварительную оптимизацию. Хотя ответ Кристофера достаточно прост, я бы посоветовал привыкнуть к оптимизации того, что не является реальной проблемой. Скорее всего, будут фактические узкие места, которые, вероятно, сработают задолго до пустой сессии.   -  person Olaf Kock    schedule 09.06.2018


Ответы (2)


У вас есть несколько вариантов, здесь.

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

Другой способ — отключить создание сеанса для этого JSP. По умолчанию сеансы создаются при доступе к JSP, если не указано иное. Вот как это сделать:

<%@page
  session="false"
  ..
%>
... rest of your page

Теперь ваша JSP-страница даже не будет генерировать сеанс, поэтому вам не нужно избавляться от них или что-то в этом роде.

Наконец, если вам по какой-то причине нужен сеанс в этом JSP, вы действительно можете использовать один сеанс для всех клиентов определенного типа. Это можно сделать с помощью CrawlerSessionManagerValve. Просто убедитесь, что вы установили строку crawlerUserAgents в соответствии с тем, что ваш балансировщик нагрузки использует для своих зондов.

person Christopher Schultz    schedule 09.06.2018

Как насчет того, чтобы просто уменьшить время сеанса до 1 минуты?

<session-config>
    <session-timeout>1</session-timeout>
</session-config>
person Rey333    schedule 09.06.2018