2012-11-07 27 views
0

當我從WEB-INF/lib中刪除JSF jar(jsf-api-2.0.1.jar和jsp-impl-2.0.1.jar)時,我在Windows機器上準備了新鮮且乾淨的Tomcat7,打這個錯誤:當我把兩瓶在WEB-INF/lib目錄爲什麼JSF在Tomcat 7中拋出OutOfMemoryError?

Caused by: java.lang.ClassNotFoundException: javax.faces.FacesException 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) 
    ... 10 more 

,我打的錯誤:

java.lang.OutOfMemoryError: PermGen space 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    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 org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:1956) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1919) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1806) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1765) 
    at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1751) 
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1255) 
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:882) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:317) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5081) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033) 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033) 
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:620) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

在Tomcat的7上運行JSF任何線索?

+0

請仔細閱讀[性能調優(JVM)運行-tomcat的(http://www.tomcatexpert.com/blog/2011/11/22/performance-調優-jvm-running-tomcat)和其他文章[here](http://www.tomcatexpert.com/tags/tomcat-performance) – Ravi

回答

2

您還沒有指出錯誤是在部署時還是在一段時間後立即發生。如果它在一段時間之後發生,即在您的應用程序運行期間,您的代碼將被責備。看看這個excellent article,它可以幫助您使用JDK 6追蹤錯誤的來源。

A PermGen錯誤指示與應用程序容器有關的類加載問題。永久生成(簡稱PermGen)是JVM存儲對象(如類和字符串文字)的區域。通常情況下,垃圾收集器不應該在這裏頻繁操作。一旦Web應用程序的類加載器(每個部署的Web應用程序有一個)不再被使用,應用程序服務器加載的類應自動清除該類應用程序。 Tomcat在過去給我提供了這方面的問題(特別是在Netbeans中使用時)。經過多次重新部署,似乎無法有效地清理乾淨。除了增加permgen空間的大小外,您還可以執行一些操作

1)您可以將在該tomcat實例中運行的Web應用程序的常用jar包移動到TOMCAT_HOME/lib。通過這種方式,您可以預期您的類庫不會像要求使用Web應用程序一樣被加載多次,就像tomcat的默認行爲一樣(請參閱this)。然而,請謹慎使用此選項;如果您最終部署了包含較新版本jar的Web應用程序,則可能會遇到NoClassDefFound錯誤。

2)您可以試試這個-XX:MaxPermGen,而不是(或除了)mokong在他的文章中建議的-XX:MaxPermSize

而且看一看this question and it's answers採取進一步步驟

+0

我在Eclipse IDE中運行Tomcat,我可以知道如何設置2個變量你在條目2中提到? – huahsin68

+1

看到這個鏈接如何做到這一點http://viralpatel.net/blogs/setting-tomcat-heap-size-jvm-heap-eclipse/ – Ravi

+0

@Ravi,清楚的教程,但它解決的是一個堆的設置相關錯誤,不適用於PermGen – kolossus

相關問題