Подтвердить что ты не робот

Intermittent Tomcat ClassNotFoundException для некоторых страниц jsp

У нас есть два сервера tomcat, сбалансированные по нагрузке за apache. Несколько раз мы получили сообщения о ошибке 500 на странице. Проверка показывает следующую ошибку, но только на одном из кота:

java.lang.ClassNotFoundException: org.apache.jsp.jsps.userLogin_jsp
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    etc...

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

Кто-нибудь решил эту проблему раньше? Мой поиск только нашел вопросы без ответов, включая ошибку tomcat, которая была решена как "работает для меня": https://issues.apache.org/bugzilla/show_bug.cgi?id=30450

Я бы очень признателен за то, что у вас есть. Вот еще одна информация о проекте:

  • апач-кот-6.0.28
  • java 1.6
  • Maven
  • Spring 2.5 (большое использование MVC с jstl)

Спасибо!

4b9b3361

Ответ 1

Как отмечено в комментариях выше, я не должен очищать рабочий каталог Tomcat во время его работы. Спасибо, ребята!

Ответ 2

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

В этом конкретном случае я обнаружил, что tomcat с этими тремя приложениями открывает много файлов, и в этом случае требуется около 1600 файлов, открытых для работы (системные библиотеки, баннеры, временные файлы и т.д.). Когда в некоторых запросах он превышает 1024 по умолчанию максимальные открытые файлы, похоже, что некоторые файлы не могут быть открыты и у меня случайные странные ошибки (в том числе часто ClassNotFoundException в jsp-s). Все это зависит от того, как быстро я нажимаю эти приложения в окнах браузера, файлы открываются и закрываются очень быстро.

Это помогло мне, и я больше не вижу проблем с этим экземпляром:

ulimit -n 2048

Это может использоваться для наблюдения во время выполнения сервера, каково количество открытых файлов (если tomcat запущен как пользователь "tomcat" ):

while [ true ]; do lsof -u tomcat|wc -l; sleep 1s; done