2016-12-16 62 views
1

偶爾遇到WSO2 BPS 3.6.0,我們遇到OutOfMemoryError並停止服務器。我們懷疑堆分析後,我們懷疑:wso2 bps OutOfMemoryError - 效率低下的事件列表

我們有幾個進程定期查找一些信息(使用Web服務),直到業務項狀態沒有改變。一段時間後,一些流程實例可能會有許多事件(數千個,大約10k)。當試圖查看Carbon控制檯中的實例信息時,加載的數據(實例活動)能夠導致OutOfMemoryError並丟棄服務器(具有6GB RAM):(

作爲解決方法 - 我們使用數據庫查找:

select ode_event.event_id, ode_event.detail, ode_event.tstamp, ode_event.type, 
ode_event.instance_id, ode_event.process_id, 
ode_scope.scope_name 
from ode_event, ode_scope where ode_event.instance_id=18204 and 
(ode_event.scope_id = ode_scope.scope_id); 

雖然我們認爲主意,讓任何企業用戶(甚至是流程所有者)來訪問數據庫直接作爲非常糟糕。

有什麼(更好)的方式/查詢來查看活動?這是正確的github項目來改進/功能(加載活動分頁)?

編輯:

看到這個「行爲」是從Apache的ODE實現繼承的源代碼(熱切加載範圍和事件的整個列表到內存)

回答

0

這是當前的行爲。我們可以通過添加分頁來改進它。但這是原因,這是不優先的。

如果您檢查單個數據庫表大小,您將看到事件表佔用了大部分空間。這是因爲,Process調試級別事件默認情況下處於啓用狀態,並且會生成大量事件。這些事件在開發時會很有用,但是對於生產,您必須禁用它們。否則,您正在浪費生產資源(CPS,內存,數據庫空間)。它會影響整個BPS引擎的性能。

以下是一些一般性建議。

如果您有更大和更長時間的運行過程,建議僅爲需要監視的選定範圍啓用事件。 (甚至更好,如果你沒有。:))

此外,你將需要不斷清理數據庫中的舊數據。 (只是谷歌BPS文檔的腳本)否則你的DBA會抱怨DB沒有足夠的空間在不久的將來運行。 :)

流程執行不需要事件。所以你可以清理它。在您的場景中,清理活動BPEL流程的舊事件是否正常?例如:清理比1/2/7 ..天早的事件。 ?。這將在一定程度上解決您的問題。

+0

謝謝你的回答。恕我直言,審計線索是BPM領域最有價值的功能之一。顯然,我們將不得不從事件表單獨實施審覈/簡化事件歷史記錄:(至少要知道限制 – gusto2