1

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

4

1 回答 1

0

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

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

以下是一些一般性建议。

如果您有较大且运行时间较长的进程,建议仅对您需要监控的选定范围启用事件。(如果你没有就更好了。:))

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

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

于 2016-12-17T02:57:43.770 回答