我有一个进行模拟的应用程序。那时它产生了许多ejb请求。我还从一个无状态bean调用异步方法(一个不同的bean)来进行大量数据插入。当我将我的应用程序迁移到Jboss EAP 6.4时,我的模拟时间增加了。通常情况下,模拟需要12秒。但现在需要160秒。我试图为异步消息更改我的ejb线程池。
这就是我所做的。
<session-bean>
<stateless>
<bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
</stateless>
<stateful default-access-timeout="5000" cache-ref="simple"/>
<singleton default-access-timeout="5000"/>
</session-bean>
<mdb>
<resource-adapter-ref resource-adapter-name="hornetq-ra"/>
<bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
</mdb>
<pools>
<bean-instance-pools>
<strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
<strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
</bean-instance-pools>
</pools>
<caches>
<cache name="simple" aliases="NoPassivationCache"/>
<cache name="passivating" passivation-store-ref="file" aliases="SimpleStatefulCache"/>
</caches>
<passivation-stores>
<file-passivation-store name="file"/>
</passivation-stores>
<async thread-pool-name="default"/>
<timer-service thread-pool-name="default" default-data-store="default-file-store">
<data-stores>
<file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/>
</data-stores>
</timer-service>
<remote connector-ref="remoting-connector" thread-pool-name="default"/>
<thread-pools>
<thread-pool name="default">
<max-threads count="**300**"/>
<keepalive-time time="100" unit="milliseconds"/>
</thread-pool>
现在模拟像以前一样需要12秒。但现在我有另一个问题。模拟完成后,CPU为%99。释放资源大约需要30秒。如果我开始一个新的模拟,当CPU是%99时。我在代码中有一些锁。服务器等待调用所需的ejb方法。
我没有得到什么问题,我想我只更改了最大线程数,所以服务器应该只在必要时创建线程。
你能帮帮我吗?我在Jboss AS 6中没有这个问题。也许我在Jboss As6中进行了一些性能调整,但我无法记住。编辑:我认为问题与对象数量有关。它与线程大小无关。我保持线程大小300并减少要插入的对象数量,然后cpu使用是正常的。我有400000数据库插入。可能是这个JPA实体让CPU忙碌。