Что такое активный сеанс в веб-приложении Java?

#session #jira #jmx #monitor #logged

#java #сеанс #tomcat

Вопрос:

Что такое «активные сеансы» в tomcat? Я пытаюсь отслеживать активные сеансы для веб-приложения Java. Но значения, которые я получаю, не соответствуют количеству людей, использующих веб-приложение. Не могли бы вы объяснить?

Ответ №1:

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

Обычно все браузеры сохраняют cookie идентификатора сеанса по нескольким запросам и даже нескольким вкладкам или окнам (за исключением вкладок / окон инкогнито, конечно).

Существует несколько причин, по которым количество сеансов больше, чем количество пользователей.

  • Сеансы проводятся в tomcat в течение определенного периода времени, по умолчанию используется 2 часа. Вы можете изменить это количество в настройках tomcat. Итак, если 100 пользователей войдут в ваше приложение в первый час и 100 во второй, общее количество сеансов составит 200, даже если первые 100 пользователей простаивают.

  • Роботы, подобные Google bot, как правило, создают тонны сеансов. Если ваша страница общедоступна, проверьте журналы доступа, нет ли ботов, посещающих вашу страницу.

  • Если ваше приложение находится за балансировщиком нагрузки или прокси-сервером, которые постоянно «проверяют» ваше приложение на предмет его доступности, эти запросы также могут создавать сеансы.

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

  • Также имейте в виду, что сеанс привязан к доменному имени сайта. Итак, если пользователь подключается к вашему сайту через несколько доменов (например www.domain.com для содержания и static.domain.com для изображений) каждое из подключений будет иметь свой собственный сеанс.

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

  • Если у вас есть части вашего приложения, которые не требуют сеанса, убедитесь, что вы не вызываете request.getSession() где-либо в своем коде. Также в jsp вы можете явно отключить сеанс с помощью <%@ page session="false" %>
  • Чем меньше тайм-аут сеанса, тем быстрее они истекают в <session-config><session-timeout>30</session-timeout></session-config> tomcat/conf/web.xml Значение тайм-аута сеанса выражается в минутах.

Наконец, если вас интересует, что на самом деле происходит в вашем приложении, приобретите инструмент APM (управление производительностью приложений), такой как MoSKito