2016-06-08 102 views
1

我是SOA新手,目前我们在使用BPEL进行XML转换时遇到了一个问题。 我们有3个SOA项目会做这样的事情:BPEL,线程被哈希映射到HashMap.getEntry?

  1. 从文件夹位于文本格式
  2. 在数据库
  3. 保存文件的内容并把AQ
  4. 读取文件ID从AQ,加载内容读取输入文件从数据库转换为我们内部的XML格式
  5. 应用一些业务逻辑并将内容转换回文本格式。

SOA proejct1执行步骤1-2,project2执行步骤3并将project3执行到step4。

我们正在使用输入7000文件进行一些负载测试。

我们遇到的问题是,内存使用“老一代”的不断积累,但主要GC可以减少它,它仍然保持增长,直至100%。然后不能创建新的BEPL实例,并且我们遇到事务超时。

分析堆转储后,我们得到如下的结果,似乎BPELFactoryImpl拥有超过180M的HashMap,并且它会不断增长。所有人都有类似的经历吗?

我们使用SOA版本12.1.3。这个问题使我们停了好几个星期,请大家帮忙,谢谢。 Image of heap analysis

回答

0

家伙

最后我们得到了这样的答案,它是由一个bug,导致由Oracle支持说,我们正在等待补丁。 感谢您的关注。

这是一个错误。你应该提出一个SR指为:阻塞线程上

at java.util.HashMap.getEntry(HashMap.java:465) 
at java.util.HashMap.get(HashMap.java:417) 
at oracle.xml.parser.v2.XMLNode.setUserData(XMLNode.java:2137) 
at oracle.bpel.lang.v20.model.impl.ExtensibleElementImpl.doCreateElement(ExtensibleElementImpl.java:502) 
at oracle.dp.entity.impl.EmFacadeObjectImpl.getElement(EmFacadeObjectImpl.java:35) 
at oracle.bpel.lang.v20.model.impl.ExtensibleElementImpl.performDOMChange(ExtensibleElementImpl.java:707) 
at oracle.bpel.lang.v20.model.impl.ExtensibleElementImpl.doOnChange(ExtensibleElementImpl.java:636) 
at oracle.bpel.lang.v20.model.impl.ExtensibleElementImpl$DOMUpdater.notifyChanged(ExtensibleElementImpl.java:535) 
at oracle.dp.notify.impl.NotifierImpl.emNotify(NotifierImpl.java:39) 
at oracle.dp.entity.impl.EmHolderImpl.doNotifyOnSet(EmHolderImpl.java:53) 
at oracle.dp.entity.impl.EmHolderImpl.set(EmHolderImpl.java:47) 
at oracle.bpel.lang.v20.model.impl.CopyImpl.setTo(CopyImpl.java:115) 
at com.collaxa.cube.engine.ext.bpel.v2.wmp.BPEL2xCallWMP$CallArgument$1.evaluate(BPEL2xCallWMP.java:190) 
at com.collaxa.cube.engine.ext.bpel.v2.wmp.BPEL2xCallWMP.invokeMethod(BPEL2xCallWMP.java:103) 
at com.collaxa.cube.engine.ext.bpel.v2.wmp.BPEL2xCallWMP.__executeStatements(BPEL2xCallWMP.java:62) 
at com.collaxa.cube.engine.ext.bpel.common.wmp.BaseBPELActivityWMP.perform(BaseBPELActivityWMP.java:188) 
at com.collaxa.cube.engine.CubeEngine.performActivity(CubeEngine.java:2880) 
.... 

错误20857627(20867804):性能问题,由于大量滞留在HashMap.get

+0

线程我认为他们应该在这里使用的ConcurrentHashMap,而不是HashMap,它不是线程安全的。 – sujoe

+0

另请参阅:http://stackoverflow.com/questions/17070184/hashmap-stuck-on-get – sujoe