Прерывистый Tomcat ClassNotFoundException для некоторых страниц JSP - PullRequest
11 голосов
/ 22 октября 2010

У нас есть два сервера 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, которая была решена как «работает для меня»: https://issues.apache.org/bugzilla/show_bug.cgi?id=30450

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

  • apache-tomcat-6.0.28
  • Java 1.6
  • Maven
  • Spring 2.5 (тяжелыйиспользование MVC с jstl)

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 марта 2012

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

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

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

ulimit -n 2048

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

while [ true ]; do lsof -u tomcat|wc -l; sleep 1s; done
1 голос
/ 09 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...