2010-10-21 52 views
11

我們有兩個Tomcat服務器在apache後面進行負載平衡。現在有好幾次我們得到了一個頁面上有500個錯誤的報告。檢查顯示以下錯誤,而只是對雄貓之一:對於某些jsp頁面,間歇性的Tomcat ClassNotFoundException

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)

謝謝!

+0

如果它總是相同的Tomcat,即使只有該服務器在集羣中,即另一個關閉,它是否會失敗。我想你不能在Prod上測試,你有一個預生產實例要複製嗎?它總是與userLogin.jsp或其他JSP相同嗎? – JoseK 2010-10-22 05:20:26

+1

也看到這個線程,https://issues.apache.org/bugzilla/show_bug.cgi?id=48097雖然這將它變成6.0.21。您是否正在使用JspServlet開發= true – JoseK 2010-10-22 05:21:06

+0

謝謝您提供豐富的鏈接!不幸的是,這不是我能夠重現的。起初我忘了它,但是我們昨天推出了一場新的戰爭,在我再次啓動tomcat之前,我忘記了清除工作目錄。在tomcat啓動後,我繼續做了。你認爲這可能導致了這種情況嗎? – samspot 2010-10-22 16:33:47

回答

1

正如上面的評論所述,我不應該在運行Tomcat的工作目錄時清除它。多謝你們!

1

我發現了另一個實例,這可能會導致類似的情況。我有兩個應用程序部署在tomcat中,當我部署第三個應用程序時,我開始觀察這種行爲。

在這種特殊情況下,我發現這三個應用程序的tomcat打開了很多文件,並且在這個例子中有時需要打開大約1600個文件(系統庫,罐子,臨時文件等)。當它在某些請求中超過系統默認的1024個最大打開文件時,它看起來有些文件無法打開,並且我有隨機奇怪的錯誤 (包括jsp-s中經常出現的ClassNotFoundException)。所有這些取決於我在瀏覽器窗口中點擊這些應用程序的速度,這些文件很快就會打開和關閉。

這幫助了我,我再也看不到與此實例問題:

ulimit -n 2048 

這可能被用來在服務器運行期間觀察到,什麼是打開的文件的數量(如Tomcat的運行爲「tomcat」用戶):

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

爲了解決我們遇到的一些其他問題(日誌中的「打開的文件過多」),我們不得不增加ulimit。我認爲ulimit設置是每個人都應該知道的事情,但我們大多數人都會發現困難的方式! – samspot 2012-03-26 16:36:34