在将大型服务器应用程序从运行 EJB 3.0 的 JBOSS 4.0.5 迁移到运行 EJB 3.1 的 JBOSS 6.1.0 之后,我注意到在并发(100+)访问有状态 bean 和方法调用时响应时间一致增加。
在几个测试中,方法调用的平均响应时间过去在旧环境上约为几毫秒,而在较新版本上,在相同系统上的平均值约为数百,所有内容都在本地运行,因此排除了网络问题。(主要是 setter)(SFB 查找在本地完成)
我该如何进一步调查这可能是什么原因造成的?
只是我的想法
Stateful Session Bean的生命周期
http://docs.oracle.com/javaee/6/tutorial/doc/giplj.html#gipln
在 Jboss 中,如果缓存变得太满或 bean 太旧,那么状态会话 Bean 会从 Ready 状态变为 Passive 状态。
http://docs.jboss.org/ejb3/docs/reference/1.0.7/html/SessionBean_and_MDB_configuration.html
我认为“完全缓存”可能是响应延迟的原因之一,因为它会开始钝化有状态会话 bean。确认这一点的一种方法是将调试日志添加到有状态会话 Bean 中的 PrePassivate 回调函数中,并逐渐向应用程序施加压力以观察行为。