繁体   English   中英

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项目?

编辑:

看到源代码,这种“行为”是从Apache-ODE实现继承的(将整个范围和事件列表迅速加载到内存中)

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

如果检查单个数据库表的大小,您将看到事件表已占用了大多数空间。 这是因为,进程调试级别的事件默认情况下处于启用状态,并且会生成许多事件。这些事件在开发时会很有用,但是在生产时,必须禁用它们。 否则,您将浪费生产资源(CPS,内存,数据库空间)。 这将影响整个BPS引擎的性能。

以下是一些一般性建议。

如果您的流程较长且运行时间较长,建议仅对需要监视的选定范围启用事件。 (如果您什么都没有,那就更好了。:)

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

流程执行不需要事件。 这样您就可以清理它。 在您的方案中,可以清除活动BPEL流程的OLD事件吗? 例如:清除早于1/2/7 ..天的事件。 这将在某种程度上解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM