请在将其标记为重复之前完整阅读。
我已经浏览了很多博客/帖子和谷歌,以找到解决烫发OOM问题的具体方法;但到目前为止,他们都没有解决这个问题。这是我的用例:
- 我有一个tomcat服务器,在其上部署了许多单独的项目* .war文件。
- 最初的烫发问题不是问题,我们继续添加更多模块。
- 最近我们遇到了Perm Gen - OOM问题,并通过增加JVM参数中的perm gen内存成功解决了这个问题。
- 我们继续添加更多模块,然后再过一天就遇到了这个问题。
- 作为临时解决方案,我们会继续重新启动服务器,问题会在一周左右时保持沉默。
醇>
寻求永久性解决方案:
- 在JVM参数中增加perm gen的着名方法不再是一个选项。
- 我知道这可能是代码问题,导致内存泄漏。但是,审查庞大的代码库几乎是不可能的。
需要您的帮助:
是否有免费工具或快速方法(或提示)来找出错误的代码
这里吗?
我们的代码模块中有一个观察结果:
- 我观察到,在每个模块*战争中,使用了80%的普通jar,但所有这些都被单独捆绑到每场战争中。
我的分析(我可能错了)
- tomcat服务器必须为每个模块war使用单独的app-classloader。
- 所以,即使来自jar的两个相同的类(比如同一个abcd.jar位于不同的战争中)也被加载到perm gen区域;它们彼此不可见(由于java安全模型)。
- 简而言之,对于每个应用程序,一个类的许多副本可能会被加载(否则可能会变得很常见)。
需要您的帮助:
以上分析是否成立?
如果我们将公共jar移动到一些常见的lib路径并将该路径包含到tomcat共享lib配置中,它会有帮助吗?我的目标只是加载到perm gen区域的一个类副本。
最后 - 我应该考虑哪种其他方式?