Websphere 内存不足问题 - 8.0.0.12 - com.ibm.xml.xlxp2.scan.util.SymbolMap

Websphere out of Memory Issue - 8.0.0.12 - com.ibm.xml.xlxp2.scan.util.SymbolMap

我们正在使用 websphere 8.0.0.12 托管我们的 JAX-WS 网络服务(使用 CXF)。 websphere 的内存每天都在增加,我们每 5 到 6 天就会有一个 "Out of Memory"(每天约 300,000 个请求)。堆 space 设置为 1 GB。

使用 eclipse MAT 检查堆转储后,我们看到下面的 类 占用了将近 800 MB 的堆

Problem Suspect 1
The class "com.ibm.xml.xlxp2.scan.util.SymbolMap", loaded by "<system class loader>", occupies 731,574,968 (66.22%) bytes. The memory is accumulated in one instance of "com.ibm.xml.xlxp2.scan.util.Symbol[]" loaded by "<system class loader>".

Keywords
com.ibm.xml.xlxp2.scan.util.Symbol[]
com.ibm.xml.xlxp2.scan.util.SymbolMap

  Problem Suspect 2
One instance of "com.ibm.xml.xlxp2.scan.util.DataBuffer" loaded by "<system class loader>" occupies 134,217,792 (12.15%) bytes. The memory is accumulated in one instance of "byte[]" loaded by "<system class loader>".

Keywords
com.ibm.xml.xlxp2.scan.util.DataBuffer
byte[]

我浏览了一些指向 websphere 补丁的帖子。

谁能解释一下 SymbolMap/DataBuffer 的目的以及解决此问题的方法。 (补丁除外)。

您可以在 jvm 上设置自定义 属性。

com.ibm.xml.xlxp2.scan.util.SymbolMap.maxSymbolCount=64000

IBM StAX 是一个解析器实现,它处理 XML 文档以实现高效使用。它扫描 XML 个文档并缓存 XML 个符号。缓存的增长可能会导致内存不足问题。 64000 是符号映射大小的推荐值。此系统 属性 由 APAR PI08415. Also 引入,可能有助于理解 IBM stAX 相关的内存不足问题。

IBM 已经发布了解决此问题的 APAR。参见 http://www-01.ibm.com/support/docview.wss?uid=swg1PI08415