2

我们在 Servicemix 3.3.2 中使用 apache ode 1.3.3 来实现我们的工作流程。当负载增加时(即每单位时间的流调用数),ode 冻结,停止处理新请求并挂起。Usullay,我们通过在清理“数据”文件夹后重新启动 Servicemix 来解决这个问题。

最初,我认为这是一个线程问题(缺少供 ode 使用的线程)。在增加 ode-jbi.properties 中的“线程池大小”后,这个问题得到了扩展。但是,在重负载下,ode 继续挂起。

进一步的调查以及额外的日志显示,在重负载下,ode 无法获得足够的数据库连接 (NoManagedConnectionException) 来保持其状态。我们的 ode 持久性配置是 INTERNAL(请参阅 ode-jbi.db.mode=INTERNAL ),其中连接池由容器/运行时本身维护。将其迁移到外部 jndi 数据源配置(我们可以在其中配置连接池参数)的努力尚未取得成果(由于我无法理解每个阶段不断出现的无数错误:(:))

所以我尝试了另一个可用选项,即我的进程的“内存中执行”。这在“测试设置”中运行良好,并且在模拟负载下不再抛出“NoManageConnectionException”。

但我对将其转移到 PROD 有一些担忧。内存中执行与“持久”执行有何不同?这将消耗多少内存?这是否会通过导致“OutOfMemoryOutages”影响我的 PROD 设置的可靠性。

我们有大约 10 个已部署的 bpel 进程。和负载(请求数)......嗯,它通常是最小的,但有时会飙升(这就是我需要我的进程运行得非常快但不会导致任何 OutOfMemory PROD 中断的地方......希望:D :) :P )

需要您对此的想法、建议和意见。

在此先感谢,阿伦

4

1 回答 1

1

答案有点晚了,但仍然相关,并希望在未来对某人有所帮助。

关于外部数据库配置,此链接描述了如何将 Bitronix TM 与 Tomcat 结合使用。是的,它特定于 Tomcat,但在其他应用程序服务器中,您将有其他方法来指定托管数据源。只需确保在web.xmlandode-axis2.properties文件中相应地设置了 Apache ODE 中的引用。这应该使您能够使用外部数据库。

我发现在高负载下在内存中执行进程可能会导致ConcurrentModificationException. 这个 JIRA提到了这个问题,并且有一个固定的版本设置为 1.4。

所以我猜答案,无论内存中的执行是否稳定,是否,因为目前存在一个在高负载下表现出来的错误。

外部数据库耦合也是可能的,如果 CME 也使用外部数据库抛出,我将在明天进行测试。

编辑:

没有看到ConcurrentModificationException连接到外部数据库(容器管理)的时间,但确实偶然发现了这个 JIRA的症状,这是可修补的,尽管问题中没有提供反馈,我目前无法构建源代码。

编辑:

内存中执行的 BPEL 流程仅限于同步(具有一个接收操作),如此处所解释,这实际上是 ODE 开发人员对同一问题的回答...... :)

因此,BPEL 流程的内存中执行是稳定的,只要它们是同步的。

于 2014-01-16T16:22:26.663 回答