我们在 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 )
需要您对此的想法、建议和意见。
在此先感谢,阿伦