我们正在使用websphere 8.0.0.12来托管我们的JAX-WS Web服务(使用CXF)。 websphere的记忆每天都在增加,我们最终会得到一个“内存不足”的记忆。每5至6天(每天约300,000次请求)。堆空间设置为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的用途以及解决这个问题的方法。 (补丁除外)。
答案 0 :(得分:2)
您可以在jvm上设置自定义属性。
com.ibm.xml.xlxp2.scan.util.SymbolMap.maxSymbolCount=64000
IBM StAX是一个解析器实现,它处理XML文档以便有效使用。它扫描XML文档并缓存XML符号。缓存的增长可能会导致内存不足问题。 64000是符号映射大小的推荐值。该系统属性由APAR PI08415引入。另外this可能有助于理解IBM stAX相关的内存不足问题。
答案 1 :(得分:1)
IBM发布了一个解决此问题的APAR。见http://www-01.ibm.com/support/docview.wss?uid=swg1PI08415