Сессии Tomcat, истекающие неожиданно

Обновление ответа для VS2012, чтобы охватить исполняемый файл и библиотеки.

Если ваш проект является исполняемым файлом, вам нужно перемещаться следующим образом: Myproject -> properties -> linker -> дополнительные зависимости и добавить dll или lib.

Если вы проектируете библиотеку, вкладка «компоновщик» отсутствует, поэтому вам нужно перемещаться следующим образом: Myproject -> properties -> Librarian -> дополнительные зависимости и добавить dll или lib

13
задан Stu Thompson 7 June 2009 в 07:12
поделиться

8 ответов

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

Если это вообще возможно, отслеживайте сборку мусора и / или включите наблюдение с помощью jconsole или jvisualvm.

8
ответ дан 1 December 2019 в 21:25
поделиться

Я бы увеличил мониторинг сервера в целом и сессий в частности.

Хорошим приложением для мониторинга является лямбда-зонд - он позволяет просматривать текущие сеансы и их данные. Я бы также добавил HttpSessionListener для регистрации создания и уничтожения сеанса.

Правка

Возможно ли, что вы добавляете некоторые несериализуемые объекты в сеанс, и Tomcat не может пассивировать их на диск?

Править 2

Лямбда-зонд, кажется, мертв, и есть гораздо лучший форк проекта на http://code.google.com/p/psi-probe/

4
ответ дан 1 December 2019 в 21:25
поделиться

Увеличьте количество журналов сеансов, что может пролить свет на вашу проблему.

Страница конфигурации Tomcat Ведение журнала в Tomcat включает пример увеличения количества журналов сеансов.

2
ответ дан 1 December 2019 в 21:25
поделиться

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

-1
ответ дан 1 December 2019 в 21:25
поделиться

You can search Tomcat's bug database, but it would be better to have another look at your web application first. The chances that there is something wrong with Tomcat are very low.

Try to investigate what causes session invalidation. Are you using filters? Do you have cross-context requests? Try adding logging information for every request to find out, when exactly the session is lost.

0
ответ дан 1 December 2019 в 21:25
поделиться

есть тайм-аут, который вы можете настроить в своем web.xml:

<web-app>
  ...
  <session-config>
    <session-timeout>-1</session-timeout> 
  </session-config>
</web-app>

используйте -1 без тайм-аута

2
ответ дан 1 December 2019 в 21:25
поделиться

Возможная причина заключается в том, что вы помещаете в сеанс объект, который НЕ реализует интерфейс Serializable. Tomcat иногда записывает некоторые сеансы на диск. Если сеанс содержит несериализуемые объекты, он будет просто удален из контейнера (из-за NotSerializableException). Если это происходит, вы должны увидеть исключение в файле журнала tomcat.

7
ответ дан 1 December 2019 в 21:25
поделиться

Мы только что столкнулись с этим с tomcat 6_0_18 и ibm 1.5 jvm

оказалось, что это проблема ibm jvm с атомарными операциями.

В tomcat выше 6_0_19 есть исправление для решения этой проблемы.

Это также не происходит в sun 1.5 jvm

вот некоторые подробности

tomcat bugzilla case

2
ответ дан 1 December 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: