2

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

为了找到解决 perm gen OOM 问题的具体方法,我在这里和谷歌上浏览了许多博客/帖子;但到目前为止,他们都没有解决这个问题。这是我的用例:

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

永久解决方案的方法:

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

需要您的帮助

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

我们的代码模块中的一项观察:

  • 我观察到在每个模块 *war 中,使用了 80% 的公共 jar,但它们都单独捆绑到每个 war 中。

我的分析在这里(我可能错了)

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

需要您的帮助

上述分析是否成立?

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

最后- 我应该考虑什么其他方式?

4

0 回答 0