2016-06-08 99 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