某些jsp页面的间歇性Tomcat ClassNotFoundException

时间:2010-10-21 21:47:46

标签: java apache jsp tomcat

我们在apache后面有两个tomcat服务器负载均衡。好几次,我们得到一个页面上500错误的报告。检查显示以下错误,但仅在其中一个tomcats上显示:

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

我真的很感激你有任何见解。以下是有关该项目的其他信息:

  • Apache的Tomcat的6.0.28
  • java 1.6
  • 行家
  • Spring 2.5(大量使用MVC和jstl)

谢谢!

2 个答案:

答案 0 :(得分:1)

如上面的评论中所述,我不应该在运行时清除Tomcat的工作目录。谢谢你们!

答案 1 :(得分:1)

我发现了另一个实例,可能会导致类似情况。我在tomcat中部署了两个应用程序,当我部署第三个应用程序时,我开始观察到这一点 行为。

在这个特殊情况下,我发现带有这三个应用程序的tomcat会打开很多文件,并且在这个实例中需要打开大约1600个文件(系统库,jar,temps等)。当它超过系统默认1024个最大打开文件的某些请求时,它看起来有些文件无法打开,我有随机奇怪的错误 (包括jsp-s中经常出现的ClassNotFoundException)。所有这些取决于我在浏览器窗口中单击这些应用程序的速度,文件很快就会打开和关闭。

这对我有帮助,我不再看到这个实例的问题:

ulimit -n 2048

这可能用于在服务器运行时观察,打开文件的数量是多少(如果tomcat以“tomcat”用户身份运行):

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