Неожиданно заканчиваются сеансы Tomcat
Мы запускаем сервер приложений tomcat, который обрабатывает более 100 параллельных сеансов.
За последние 2 месяца наиболее активные пользователи заметили, что иногда их запускают из системы.
Как я понял из сеанса log tomcat, срок действия истек без какой-либо причины.
Я не вижу проблем со стороны веб-приложения.
Есть ли проблема с стороны tomcat?
Tomcat 6.0.18.
Ответы
Ответ 1
Если не было никакой вероятности запуска кода, я бы посмотрел на использование памяти. Это может привести к тому, что Tomcat исчерпает память и отменяет сеансы для восстановления.
Если на всех возможных мониторах собирать мусор и/или включать наблюдение с помощью jconsole или jvisualvm.
Ответ 2
Возможная причина заключается в том, что вы помещаете в сеанс объект, который НЕ реализует интерфейс Serializable. Tomcat иногда пишет некоторые из сессий на диске. Если сеанс содержит несериализуемые объекты, он просто будет удален из контейнера (из-за исключения NotSerializableException). Если это происходит, вы должны увидеть Exception в файле журнала tomcat.
Ответ 3
Я бы увеличил мониторинг сервера в целом и сеансов.
Хорошее приложение для мониторинга лямбда-зонд - позволяет просматривать текущие сеансы и их данные. Я также добавлю HttpSessionListener для создания и уничтожения сеанса регистрации.
Edit
Возможно ли, что вы добавите некоторые несериализуемые объекты в сеанс, и Tomcat не сможет их пассивировать на диск?
Изменить 2
Лямбда-зонд кажется мертвым, и там есть гораздо лучшая вилка проекта над http://code.google.com/p/psi-probe/
Ответ 4
существует тайм-аут, который вы можете настроить в своем web.xml:
<web-app>
...
<session-config>
<session-timeout>-1</session-timeout>
</session-config>
</web-app>
использовать -1 для таймаута
Ответ 5
Увеличьте регистрацию сеансов, что может пролить свет на вашу проблему.
Страница конфигурации Tomcat Вход в Tomcat включает пример увеличения регистрации сеансов.
Ответ 6
Мы просто столкнулись с этим с tomcat 6_0_18 и ibm 1.5 jvm
оказывается, что это была проблема ibm jvm с атомными операциями.
В tomcats есть исправление, превышающее 6_0_19.
Это также не происходит в sun 1.5 jvm
вот еще несколько деталей
файл tomcat bugzilla
Ответ 7
Я видел подобные проблемы, когда существуют следующие предпосылки:
- несколько экземпляров приложения tomcat установлены на нескольких JVM
- балансировка нагрузки (между веб-сервером и JVM Tomcat) настроена неправильно.
- Функция репликации сеанса Tomcat не включена
Из-за неправильной конфигурации балансировки нагрузки веб-сервер может случайно решить разорвать схожесть сеанса и отправить входящий запрос в JVM Tomcat, который ранее не видел сеанс. Tomcat JVM выпустит новый сеанс, и пользователь потеряет все свои предыдущие данные сеанса и начнет эффективно работать.
Ответ 8
Вы можете найти базу данных ошибок Tomcat, но лучше сначала взглянуть на ваше веб-приложение. Шансы на то, что с Tomcat что-то не так, очень низки.
Попробуйте выяснить, что вызывает недействительность сессии. Вы используете фильтры? Есть ли у вас кросс-контекстные запросы? Попытайтесь добавить информацию о регистрации для каждого запроса, чтобы узнать, когда именно сессия потеряна.
Ответ 9
Несмотря на то, что я не знаю причину проблемы, одним из возможных исправлений (которое я сделал в моем предыдущем проекте) было бы запуск приложения в кластере tomcat и восстановление сеанса. Сессии могут быть по умолчанию липкими, а когда один node опускается, здоровые узлы собирают сеансы, и все это прозрачно для конечного пользователя.