【发布时间】:2016-09-16 08:35:11
【问题描述】:
我们有一个大型知识管理应用程序,正在从 JBoss EAP 4.3 迁移到 EAP 6.4。我们遇到了一些问题,即并行 MDB 驱动的进程失败(在this question 中引用了错误消息),这可以追溯到 SLSB 池的耗尽。 MDB 线程正在请求一个特定的无状态会话 bean 三层深(以打开新事务),因此 10 个并发进程足以耗尽池并导致死锁,默认 max-pool-size 为 20。
解决方案是将特定的 SLSB 分配给它自己的池,并确保 max-pool-size 设置得足够大,以便始终有足够的 bean 实例可用(在我们的例子中是 75 个,因为罪魁祸首 MDB 进程本身限制为 25 个实例)。毫无疑问,我们会在我们的应用程序中发现许多其他情况,这些情况可能需要或至少受益于设置类似的自定义池大小。
关键是,JBoss EAP 中 MDB 和 SLSB 最大池大小的默认值——每个 bean 20 个实例——似乎低得离谱。我想做一些分析,看看在应用程序的典型使用期间我们有多少 EJB 实例在运行,这样我就可以知道我们需要允许的池大小。
-
max-pool-size默认值为 20 的原因是什么? - 只设置
max-pool-size会不会有什么坏处? 默认slsb-strict-max-pool和mdb-strict-max-pool给一些 任意大值?我认识到这可能会增加峰值 应用程序实例化时使用的内存分配 很多 EJB 实例,但是由于 EJB 只是根据需要实例化并添加到池中,它与不使用池的替代方案有何不同? (作为上下文,我进行了一次快速审核,计算了我们应用程序中的 34 个 MDB 和 775 个 SLSB。) - 最好将我的 EJB 池的
max-pool-size与应用程序所需的 EJB 实例的预期数量紧密匹配,还是我可以在所有内容上设置一个较大的max-pool-size值并保持不变?
【问题讨论】:
标签: jboss-eap-6