Jakarta ee 一个JavaEE服务器可以处理多少个远程EJB客户端?

Jakarta ee 一个JavaEE服务器可以处理多少个远程EJB客户端?,jakarta-ee,numbers,ejb,capacity,Jakarta Ee,Numbers,Ejb,Capacity,在这种情况下,大约有450个远程EJB客户端需要连接到JavaEE服务器(OpenEJB 3.1.4容器)。不存在HTTP服务器 我们注意到,在许多客户端上线后,服务器开始抛出javax.ejb.ConcurrentAccessTimeoutException 文档说,这是由于试图同时访问方法中的有状态会话bean或单例bean时超时造成的。我们实际上同时使用这两种方法,但很难确定超时值是多少 如果该值高,我们得到的ConcurrentAccessTimeoutException就少了,但很多客

在这种情况下,大约有450个远程EJB客户端需要连接到JavaEE服务器(OpenEJB 3.1.4容器)。不存在HTTP服务器

我们注意到,在许多客户端上线后,服务器开始抛出javax.ejb.ConcurrentAccessTimeoutException

文档说,这是由于试图同时访问方法中的有状态会话bean或单例bean时超时造成的。我们实际上同时使用这两种方法,但很难确定超时值是多少

如果该值高,我们得到的ConcurrentAccessTimeoutException就少了,但很多客户机只是开始永远挂在那里。如果该值较低,将抛出大量ConcurrentAccessTimeoutException

所有450个客户端都在启动时建立到服务器的连接(因为连接时间太长,无法按需进行),并永远保持连接

现在,除此之外还有另一个问题。每台客户机都会以2秒的间隔不断轮询服务器。我们可以改变这种行为,但我们必须调整架构

有没有研究人员或有过与许多客户机连接到JavaEE服务器的经验的人


我们可以根据需要进行设计,但我们希望有一个更具体的目标。

在StackOverflow上可能是一个很难回答的问题,因为最终这是一个线程问题,与EJB无关。这个问题或多或少与“我有在同步块中执行的代码,我应该能够使用多少线程并保持速度?”

真正的问题是同步块中的代码在做什么?(即
@Stateful
bean或
@Singleton
@Lock(WRITE)
方法)。目标是消除同步的需要,或者至少缩短同步代码运行的持续时间

有具体的方法来获取这些信息

一种技术是将超时增加到接近无穷大,然后当事情挂起时,在命令行上发出
kill-3 12345
,其中12345是服务器的进程id。这将导致线程转储吐出到服务器的System.out上

该输出将准确地显示每个线程正在做什么,它当前调用什么方法,以及该线程是否处于等待状态。您将需要多次筛选该输出


它应该为您提供一些线索,让您知道代码的哪些方面可能会最阻碍这次演出。要回答的问题是,代码在做什么,导致其他线程不得不等待。

好吧,我希望类似这样的事情:“我们设法用一台服务器获得了N个客户端”。。。我们已经升级到OpenEJB 4,开始做更多的测试。是的,没有一个确定的数字。第一个指示器是应用程序代码本身。如果它有太多的同步,它就不能扩展,不管你用什么硬件。一旦清除了这一点,第二个最重要的因素是服务器中的核心数。如果你想联系我离线,我很高兴看到什么建议,我可以给你的应用程序明智的免费。升级是好的,但如果应用程序不允许,则不会改变性能。