2015-08-24 41 views
0

將Spring 3.2遷移到Spring 4.1時遇到以下錯誤,同時擊中JSP。Spring 4遷移:OutOfMemoryError:PermGen空間

java.lang.OutOfMemoryError: PermGen space 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9910) 
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9890) 
    at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8454) 
    at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:718) 
    at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:383) 
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:428) 
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:450) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:321) 
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)  

該應用程序的其他服務和其他內部業務邏輯工作正常。每當我嘗試點擊任何jsp時,我都會收到以下錯誤消息。

這些是我在我的應用程序中使用的JSP相關依賴關係。

<dependency> 
     <groupId>jstl</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 

    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>javax.servlet.jsp-api</artifactId> 
     <version>2.3.1</version> 
     <type>jar</type> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
     <type>jar</type> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>2.0</version> 
     <type>jar</type> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>2.1</version> 
     <type>jar</type> 
     <scope>provided</scope> 
    </dependency> 

我使用瓦片3並添加了瓦片的所有相關依賴關係。 任何想法如何解決這個?另外,幫助我解決依賴關係問題,我使用Apache Tiles和JSP作爲前端的Spring MVC應用程序。

回答

0

您的堆棧跟蹤表示您已經用完了PermGen空間,因此您需要分配更多。這裏有一個鏈接,引導您完成步驟爲Tomcat這樣做: http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/

基本上,你只需要添加

-XX:MaxPermSize=<size> 

用來啓動tomcat的JVM參數,其中<size>是量的perm gen空間分配。例如

-XX:MaxPermSize=512m 

如果你有興趣,這是不是升級依賴的一個直接結果,更像是一個副作用 - 庫的新版本需要更多燙髮根空間,所以在升級過程中,您的應用程序已經超過了現有的限制,因此您需要添加更多。