【问题标题】:Java memory leak while using Axis2 and WAS 7使用 Axis2 和 WAS 7 时发生 Java 内存泄漏
【发布时间】:2012-12-28 02:22:46
【问题描述】:

我有一个在 IBM Websphere 7.0.0.19 中运行的独立应用程序。它在 Java 6 中运行,我们在 EAR 中打包了一个 Axis2 JAR。我们加载了 'parent last' 样式类,并且默认禁用了 WAS7 打包的 Axis 服务。

最近,在连续运行 6 周以上后,该应用程序出现了 OOM。令人困惑的是,应用程序分别部署在 2 台不同的机器上。但只有一台机器坏了。第二台机器还在。

我们使用 WAS 控制台检查了操作系统、服务器配置(如类加载器策略),它们在两台机器上都相似。

当应用程序崩溃时,它会生成一个 .phd 文件,我们使用 Eclipse Memory Analyzer Tool (MAT) 对其进行分析。分析显示在屏幕截图中。

如果我是正确的,引导类加载器会重复加载并保持对 AxisConfiguraiton 的引用,因此 GC 在运行时无法收集它们。但是,如果是这种情况,那么两台服务器都必须停机。但只有一台服务器经历了 OOM。两台机器上分配给 JVM 的内存是一样的。

我们不确定问题出在 WAS 7、axis2-kernel-1.4.1.jar 还是其他问题上。

http://www.slideshare.net/leefs/axis2-client-memory-leak
https://issues.apache.org/jira/browse/AXIS2-3870
http://java.dzone.com/articles/12-year-old-bug-jdk-still-out

(链接可能不涉及当前问题。但它们只是指针)

有没有人经历过类似的事情?

【问题讨论】:

  • 你能在 7.0.0.25 上试试吗(排除它在 websphere 中的错误)
  • @AviramSegal - WAS 7.0.0.19 中是否存在可能导致此问题的已知错误?即使我改变了这一点,你不认为复制这个问题需要大量的时间。另外,如果是 Websphere 的错误,为什么第二台服务器没有关闭?只有一台服务器出现 OOM,另一台仍在运行。
  • 没有具体的我知道,但你永远不会知道。此外,这个question 可能是相关的
  • @AviramSegal - 我们已经忽略了 IBM 构建到 WAS 中的 Axis。我们打包单独的 Axis2 Jar。这就是我们截图中出现org.apache.axis2.....异常的原因。
  • 我的感觉是泄漏发生在 Axis 本身,而不是 WebSphere,但我无法确切说明原因。不过,我肯定会先尝试 7.0.0.25。废话不多说,希望有经历过的人来解答。祝你好运:)

标签: java websphere out-of-memory axis2


【解决方案1】:

过去,我们在 Axis 2 1.4 上看到 WebSphere 6.1 上的内存增长和套接字保持打开状态。已经很长时间了,但我的笔记表明可能值得考虑升级到至少 Axis 2 1.5.1 以修复 this bug with the open sockets 并确保您不会在存在单例的情况下重复创建新对象(例如服务对象)。

【讨论】:

  • 那么,这是 Axis 2 的问题,而不是 WebSphere 7 的问题?
  • 可能。在我们的例子中,它与 Axis 以及我们的应用程序使用它的方式有关。
  • 哦,我可以说我们最终放弃了使用 Axis 的自定义部署,转而使用 WebSphere Feature Pack for Web Services 提供的内容。
猜你喜欢
  • 1970-01-01
  • 2013-11-15
  • 2014-12-11
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多