有了WSO2 BPS3.6.0,我们偶尔会遇到OutOfMemoryError并停止服务器。经过堆分析,我们怀疑:
我们有几个流程,它们定期查找一些信息(使用web服务),直到业务项状态没有改变。经过一段时间后,一些流程实例可能有许多事件(数千个,一些10k)。当试图在碳控制台中查看实例信息时,加载的数据(实例活动)能够导致en OutOfMemoryError并删除服务器(拥有6GBRAM) :(
作为一种解决办法,我们使用DB查找:
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实现继承的(急切地将整个范围和事件列表加载到内存中)。
发布于 2016-12-17 02:57:43
这是当前的行为。我们可以通过添加分页来改进它。但这就是原因,这是没有优先考虑的。
如果您检查单个DB表的大小,您将看到事件表占用了大部分空间。这是因为,进程调试级别的事件在默认情况下是启用的,它生成的许多events.These事件在开发时会很有用,但是当涉及到生产时,您必须禁用它们。否则,您将浪费生产资源(CPS、内存、DB空间)。它会影响整个BPS发动机的性能。
这里有一些一般性建议.
如果您有更大且运行时间更长的进程,建议只对需要监视的选定范围启用事件。(如果你没有,就更好了。:)
此外,您还需要不断地清理数据库中的旧数据。(只是google脚本文档),否则你的DBA会抱怨DB没有足够的空间在不久的将来运行。:)
事件并不是流程执行所必需的。这样你就能把它清理干净。在您的场景中,清理活动BPEL流程的旧事件可以吗?例句:早在1/2/7.几天。?。这将在一定程度上解决你的问题。
https://stackoverflow.com/questions/41183414
复制相似问题