我们在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
我真的很感激你有任何见解。以下是有关该项目的其他信息:
谢谢!
答案 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