2015-08-24 2 views
0

При миграции Spring 3.2 в Spring 4.1 У меня возникает следующая ошибка при попадании в JSP.Spring 4 Migration: OutOfMemoryError: PermGen Space

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 и добавил все связанные зависимости плиток. Любая идея, как решить эту проблему? Также, помогите мне с зависимостями, у меня есть приложение Spring MVC с Apache Tiles и JSP в качестве интерфейсного.

ответ

0

Ваша трассировка стека говорит, что у вас закончилось пространство PermGen, поэтому вам нужно выделить еще несколько. Там есть ссылка здесь, который проведет вас через шаги, чтобы сделать это для кота: http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/

В принципе, вам просто нужно добавить

-XX:MaxPermSize=<size> 

к аргументам JVM, используемых для запуска Tomcat, где <size> это сумма пространства perm gen для размещения. например

-XX:MaxPermSize=512m 

В случае, если вы заинтересованы, это не является прямым результатом модернизации ваших зависимостей, больше как побочный эффект - новые версии библиотек требуют больше Пермского Генерала пространства, поэтому во время обновления, ваш приложение перешло по существующему лимиту, и вам нужно добавить больше.

Смежные вопросы