java - Spring 4 迁移 : OutOfMemoryError: PermGen Space

标签 java jsp tomcat out-of-memory spring-4

在将 Spring 3.2 迁移到 Spring 4.1 时,我在访问 JSP 时遇到以下错误。

    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>

我使用的是 tile 3,并添加了 Tiles 的所有相关依赖项。 知道如何解决这个问题吗????另外,帮我解决依赖关系,我有一个以 Apache Tiles 和 JSP 作为前端的 Spring MVC 应用程序。

最佳答案

您的堆栈跟踪表明您已经用完了 PermGen 空间,因此您需要分配更多空间。这里有一个链接可以指导您完成为 tomcat 执行此操作的步骤: http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/

基本上,你只需要添加

-XX:MaxPermSize=<size>

用于启动 tomcat 的 JVM 参数,其中 <size>是要分配的 perm gen 空间量。例如

-XX:MaxPermSize=512m

如果您有兴趣,这不是升级依赖项的直接结果,更像是副作用 - 较新版本的库需要更多 Perm Gen 空间,因此在升级过程中,您的应用程序已经结束现有限制,因此您需要添加更多。

关于java - Spring 4 迁移 : OutOfMemoryError: PermGen Space,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32192495/

相关文章:

java - 将对象从一个 jsp 传递到另一个 jsp

java - 从整个URL中提取jsp页面

apache - 使用 mod_proxy_ajp 在 Apache 后面正确设置 Tomcat

jquery - 是否可以使用 jQuery 选择器来访问 Struts2 元素而不需要插件?

java - 在继承类中重载Javadoc

java - 在 CompletableFuture.allof 中处理超时并记录超时 future 的正确方法

java - 连接到代理时 MQTT Android Studio 应用程序崩溃

java - Tomcat servlet 应用程序的后台线程

apache - 如何在 dojo 中启用 CORS 以连接到 Openfire

java - 使用 GSon 形成 JSON 字符串