wso2 bps OutOfMemoryError - 低效的事件列表

wso2 bps OutOfMemoryError - inefficient event list

使用 WSO2 BPS 3.6.0 时,我们偶尔会遇到 OutOfMemoryError 和服务器停止。经过堆分析我们怀疑:

我们有一些流程会定期查找一些信息(使用 Web 服务),直到业务项状态未更改。一段时间后,一些流程实例可能有许多事件(数千,大约 10k)。当试图在 carbon 控制台中查看实例信息时,加载的数据(实例活动)能够导致 en 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 项目来放置改进/功能(以加载分页的活动)?

编辑:

查看源代码,此 "behavior" 继承自 Apache-ODE 实现(急切地将整个范围和事件列表加载到内存中)

这是当前行为。我们可以通过添加分页来改进它。但这就是原因,那不是优先考虑的。

如果您检查单个数据库 table 大小,您将看到事件 table 已消耗大部分 space。这是因为,Process debug level events 是默认启用的,它会生成很多 events.These 事件,这在开发时很有用,但是当涉及到生产时,你必须禁用它们。否则你就是在浪费生产资源(CPS、内存、DB spaces)。它会影响整个 BPS 引擎的性能。

这里有一些一般性建议。

如果您有更大更长的 运行ning 进程,建议只为您需要监视的选定范围启用事件。 (如果你能有 none 就更好了。:))

此外,您还需要不断清理数据库中的旧数据。 (只需 google BPS 脚本文档)否则您的 DBA 将在不久的将来抱怨 DB 没有足够的 space 到 运行。 :)

流程执行不需要事件。所以你可以清理它。在您的场景中,是否可以清除活动 BPEL 流程的旧事件?例如:清除早于 1/2/7.. 天的事件。 ?。这将在一定程度上解决您的问题。