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 实现继承的(急切地将范围和事件的整个列表加载到内存中)