我们在Servicemix 3.3.2中使用apache ode 1.3.3来实现我们的工作流程。当负载增加时(即每单位时间的流量调用次数),ode冻结,停止处理新请求并挂起。 Usullay,我们通过在清理'data'文件夹后重新启动Servicemix解决了这个问题。
最初,我认为这是一个线程问题(缺少使用ode的线程)。在增加ode-jbi.properties中的“线程池大小”之后,这个问题得到了扩展。但是,在负载过重的情况下,颂歌还是继续徘徊。
进一步调查,附加日志记录显示,在重负载下,ode无法获得与DB(NoManagedConnectionException)的足够连接以保持其状态。我们的ode持久性配置是INTERNAL(请参阅ode-jbi.db.mode = INTERNAL),其中连接池由容器/运行时本身维护。将它迁移到EXTERNAL jndi数据源配置(我们可以配置连接池参数)的努力还没有结果(感谢我无法理解在每个阶段都出现的无数错误:( :))
所以我尝试了另一个可用的选项,即我的进程的'内存中执行'。这在“测试设置”中工作正常,并且不再在模拟负载下抛出“NoManageConnectionException”。
但我对将其转移到PROD有一些担忧。内存执行与“持久”执行有何不同?这会占用多少内存?这会通过导致'OutOfMemoryOutages'来影响我的PROD设置的可靠性。
我们有大约10个部署的bpel进程。负载(请求数量)......好吧通常是最小的,但有时会出现问题(这就是我需要我的进程运行速度非常快但不会导致任何OutOfMemory PROD中断...希望:D :):P )
需要你的想法,建议和建议。
提前致谢, 阿伦
答案 0 :(得分:1)
答案有点晚,虽然仍然具有相关性,但希望将来可以帮助某人。
关于外部数据库配置,this link描述了如何将Bitronix TM与Tomcat结合使用。是的,它特定于Tomcat,但在其他应用程序服务器中,您将有其他方法来指定托管数据源。只需确保在web.xml
和ode-axis2.properties
文件中相应地设置Apache ODE中的引用。这应该使您能够使用外部数据库。
我发现在高负载下内存执行进程可能会导致ConcurrentModificationException
。 This JIRA指的是问题,并将固定版本设置为1.4。
所以我猜答案,无论内存执行是否稳定,都是NO,因为目前存在一个在高负载下出现的错误。
也可以进行外部数据库耦合,明天我将测试CME是否也使用外部数据库抛出。
修改强>
连接到外部数据库(容器管理)时没有看到ConcurrentModificationException
,虽然偶然发现this JIRA的症状,这是可修补的,但问题中没有提供反馈,我目前无法建立源。
修改强>
内存中执行的BPEL流程被限制为同步(有一个接收操作),正如here所解释的那样,这实际上是ODE开发人员在这个同样问题上的答案......:)
BPEL流程的内存中执行因此是稳定的,只要它们是同步的。