【问题标题】:JAXB - permGen error on Tomcat serverJAXB - Tomcat 服务器上的 permGen 错误
【发布时间】:2009-09-20 00:57:14
【问题描述】:

运行已部署的应用程序时出现以下错误。通过错误,似乎是 JAXB 造成的。请建议。

java.lang.OutOfMemoryError: PermGen space
    com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.createClassInfo(RuntimeModelBuilder.java:99)
    com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.createClassInfo(RuntimeModelBuilder.java:70)
    com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:228)
    com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:89)
    com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:70)
    com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:198)
    com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:84)
    com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:70)
    com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:304)
    com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:319)
    com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:430)
    com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:277)
    com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1100)
    com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:143)
    com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:110)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202)
    javax.xml.bind.ContextFinder.find(ContextFinder.java:376)
    javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
    javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522)
    MyJava.GetUserProfile.user(GetUserProfile.java:87)
    com.myapp.struts.TokenDirected.execute(TokenDirected.java:81)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

【问题讨论】:

    标签: tomcat jaxb permgen


    【解决方案1】:

    在 Tomcat 5.5 中遇到了同样的问题 JAXB 会导致大量内存泄漏,因为它会在服务器中创建大量静态变量。

    参考资料: http://blogs.oracle.com/fkieviet/entry/classloader_leaks_the_dreaded_java http://blogs.oracle.com/fkieviet/entry/how_to_fix_the_dreaded

    【讨论】:

      【解决方案2】:

      首先增加烫发空间的大小。 This link 告诉你怎么做。

      使用 Visual GC 监控您的内存使用情况,看看这有什么帮助。

      如果没有,请摆脱 JAXB。正是因为这个原因,我才回避它。最好手动完成 OXM,而不是依赖它。

      【讨论】:

        【解决方案3】:

        它与 JAXB 无关,但您的 Tomcat 需要更多来自 JVM 的内存,因此请使用类似

        -Xms128m -Xmx512m -XX:128m
        

        【讨论】:

          【解决方案4】:

          问题与 JaxBContext 有关。每次使用新的上下文时都会加载新的类。如果你重用你的上下文,一切都会好起来的。

          duffyno 是对的 :)

          【讨论】:

            猜你喜欢
            • 2014-10-04
            • 2011-12-02
            • 2011-04-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-28
            • 2014-12-24
            • 2011-06-12
            • 1970-01-01
            相关资源
            最近更新 更多