2012-08-25 107 views
0

我在本地開發機器上運行Tomcat 7,並且我的web應用程序運行良好,將它移動到服務器(也運行Tomcat 7),我開始收到Error 500,抱怨無法編譯一些JSP。我已經重新啓動了服務器,但仍然沒有修復它。這是我最近的日誌。可能是什麼問題呢?Tomcat - 無法編譯JSP的類

下面是我在嘗試訪問上下文根目錄下的index.jsp時獲得的屏幕截圖(所有其他頁面也都這樣做)https://docs.google.com/open?id=0B62YJhbvaJNkN3hjTUpEMVp1eUk 大約4次刷新後可能會加載的東西。我也看到了一些permGen的東西。請我需要幫助。謝謝!

Aug 25, 2012 5:05:29 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [LoginChurch] in context with path [/ReligionApp] threw exception [Servlet execution threw an exception] with root cause 
java.lang.OutOfMemoryError: PermGen space 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:634) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818) 
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1148) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1643) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334) 
    at com.mchange.v2.c3p0.C3P0Registry.reregister(C3P0Registry.java:239) 
    at com.mchange.v2.c3p0.impl.DriverManagerDataSourceBase.<init>(DriverManagerDataSourceBase.java:212) 
    at com.mchange.v2.c3p0.DriverManagerDataSource.<init>(DriverManagerDataSource.java:60) 
    at com.mchange.v2.c3p0.DriverManagerDataSource.<init>(DriverManagerDataSource.java:56) 
    at com.mchange.v2.c3p0.DataSources.unpooledDataSource(DataSources.java:152) 
    at org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:154) 
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124) 
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56) 
    at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:414) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292) 
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859) 
    at com.pacesolutions.religionapp.HibernateUtil.<clinit>(HibernateUtil.java:24) 
    at com.pacesolutions.religionapp.services.LoginChurch.processRequest(LoginChurch.java:68) 
    at com.pacesolutions.religionapp.services.LoginChurch.doPost(LoginChurch.java:140) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
Aug 25, 2012 5:06:04 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [LoginChurch] in context with path [/ReligionApp] threw exception [Servlet execution threw an exception] with root cause 
java.lang.NoClassDefFoundError: Could not initialize class com.pacesolutions.religionapp.HibernateUtil 
    at com.pacesolutions.religionapp.services.LoginChurch.processRequest(LoginChurch.java:68) 
    at com.pacesolutions.religionapp.services.LoginChurch.doGet(LoginChurch.java:127) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:636) 
Aug 25, 2012 5:11:50 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [LoginChurch] in context with path [/ReligionApp] threw exception [Servlet execution threw an exception] with root cause 
java.lang.NoClassDefFoundError: Could not initialize class com.pacesolutions.religionapp.HibernateUtil 
    at com.pacesolutions.religionapp.services.LoginChurch.processRequest(LoginChurch.java:68) 
    at com.pacesolutions.religionapp.services.LoginChurch.doPost(LoginChurch.java:140) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:636) 
Aug 25, 2012 7:18:05 AM org.apache.catalina.core.ApplicationContext log 
INFO: ContextListener: contextInitialized() 
Aug 25, 2012 7:18:05 AM org.apache.catalina.core.ApplicationContext log 
INFO: SessionListener: contextInitialized() 
Aug 25, 2012 7:18:05 AM org.apache.catalina.core.ApplicationContext log 
INFO: SessionListener: contextDestroyed() 
Aug 25, 2012 7:18:05 AM org.apache.catalina.core.ApplicationContext log 
INFO: ContextListener: contextDestroyed() 

回答

0

permen空間是VM存儲類,方法(以及其他)的地方。由於tomcat動態編譯類,它可以使用太多的這個空間,它有一個固定的上限(通常是64Mb)。

嘗試使用-XX:MaxPermSize選項爲tomcat提供更多的permgen空間。

看一看這篇文章的解釋:http://java.sun.com/docs/hotspot/gc/

+0

好的,謝謝,還有其他什麼問題?請注意,我重新啓動了Tomcat,問題仍然存在。也請看看我發佈的截圖的鏈接。謝謝。 –

+0

另一個問題是找不到類。看起來你缺少類路徑中的某些東西 - 例如WEB-INF /庫。 – Dan

+0

它在我的本地開發Tomcat上正常工作。同時,作爲一個快速解決方案,我已將該Tomcat(在服務器計算機上)交換到另一個端口,然後在端口8080上安裝新的Tomcat並重新部署。但我想知道如何解決這個問題,以防將來遇到它(我認爲很可能我會在職業生涯中再次遇到它)。 –

0

另一個問題是沒有發現一類是由PermGenSpace OOM錯誤引起的。所以在這種情況下它不相關。 哪位用戶正在運行tomcat服務器?那是根或其他用戶?此用戶是否有權在提供的堆棧跟蹤中的最後一個根本原因所指定的目錄中寫入?請參閱FileNotFoundException

+0

我認爲它以根用戶身份運行,因爲當我將一個WAR文件放入webapps目錄時,表示已部署應用程序的上下文路徑的生成目錄將由root創建。所以問題是:爲什麼它不能訪問文件系統的任何部分?同時,請記住,這不是我第一次部署此特定Web應用程序的迭代。 –