【问题标题】:PermGen error due to leak in JAXBClassLoader由于 JAXBClassLoader 中的泄漏导致 PermGen 错误
【发布时间】:2015-04-22 06:08:46
【问题描述】:

我正在运行一个大型 Java 7 应用程序(由 Maven 构建),由于 PermGen 错误,它开始多次崩溃。 在分析它(jProfiler)之后,我注意到 ClassLoader 部分在 ClassLoader 类型上的数量不断增加:org.eclipse.persistence.internal.jaxb。 JaxbClassLoader 直到进程被阻塞。 我没有直接使用 EclipseLink,但是由于一些其他的传递依赖,这个类肯定在类路径中。 1)任何人都可以解释这种增加类加载器数量的行为吗? 2)我该如何解决这个问题,知道如何使用 Maven 找到所有模块,它们的传递依赖,将这个类添加到类路径中。

谢谢, 罗南

【问题讨论】:

    标签: java maven jaxb classloader permgen


    【解决方案1】:

    使用依赖插件(根据这个答案https://stackoverflow.com/a/6110881/116509)查看需要它。

    但这不会解决您的问题,因为您可能无法将其从类路径中删除。我会尝试使用谷歌搜索 JAXB 内存泄漏(例如,请参阅此答案 https://stackoverflow.com/a/3285931/116509

    您也可以尝试在废除 PermGen 的 Java 8 JVM 上运行您的应用程序(但请参阅下面 digitaljoel 的评论),尽管修复泄漏会更好。

    【讨论】:

    • 虽然 java 8 摆脱了 PermGen,但它真正所做的只是重命名 PermGen 并允许调整其大小。如果它真的是泄漏,它只会继续泄漏,但对于元空间,它会泄漏,直到它消耗机器上的所有本机内存,而不是在达到 PermGen 大小限制时死亡。是的,您可以限制元空间的大小。我只是想指出,“删除 permgen”并不能真正解决任何问题。
    猜你喜欢
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    相关资源
    最近更新 更多