解决了Perm Gen内存不足的问题

时间:2013-09-16 05:00:18

标签: java out-of-memory permgen

请在将其标记为重复之前完整阅读。

我已经浏览了很多博客/帖子和谷歌,以找到解决烫发OOM问题的具体方法;但到目前为止,他们都没有解决这个问题。这是我的用例:

  1. 我有一个tomcat服务器,在其上部署了许多单独的项目* .war文件。
  2. 最初的烫发问题不是问题,我们继续添加更多模块。
  3. 最近我们遇到了Perm Gen - OOM问题,并通过增加JVM参数中的perm gen内存成功解决了这个问题。
  4. 我们继续添加更多模块,然后再过一天就遇到了这个问题。
  5. 作为临时解决方案,我们会继续重新启动服务器,问题会在一周左右时保持沉默。
  6. 寻求永久性解决方案:

    • 在JVM参数中增加perm gen的着名方法不再是一个选项。
    • 我知道这可能是代码问题,导致内存泄漏。但是,审查庞大的代码库几乎是不可能的。

    需要您的帮助

      

    是否有免费工具或快速方法(或提示)来找出错误的代码   这里吗?

    我们的代码模块中有一个观察结果:

    • 我观察到,在每个模块*战争中,使用了80%的普通jar,但所有这些都被单独捆绑到每场战争中。

    我的分析(我可能错了)

    • tomcat服务器必须为每个模块war使用单独的app-classloader。
    • 所以,即使来自jar的两个相同的类(比如同一个abcd.jar位于不同的战争中)也被加载到perm gen区域;它们彼此不可见(由于java安全模型)。
    • 简而言之,对于每个应用程序,一个类的许多副本可能会被加载(否则可能会变得很常见)。

    需要您的帮助

      

    以上分析是否成立?

         

    如果我们将公共jar移动到一些常见的lib路径并将该路径包含到tomcat共享lib配置中,它会有帮助吗?我的目标只是加载到perm gen区域的一个类副本。

    最后 - 我应该考虑哪种其他方式?

0 个答案:

没有答案