6

我遇到了内存泄漏问题,因为 EJB 没有从池中删除。ejb 是 3.0 和无状态的。

In my jboss jmx-console 4.3, the statistics of a particular ejb looks like:

AvailableCount  30
MaxSize     30
CurrentSize     5727
CreateCount     5727
RemoveCount     0

我的问题是:为什么“删除计数”没有增加?并且“当前大小”大于“MaxSize”?

4

1 回答 1

3

伙计,您遇到了一个可怕的错误,其中 SLSB 没有被清除和泄漏......我们几周前在我们的生产环境中遇到了这个问题......

JBoss 甚至推荐的唯一解决方法是使用StrictMaxPool而不是ThreadLocalPool用于您的 SLSB。明智地选择计数。

你应该修改ejb3-interceptors-aop.xml

<domain name="Stateless Bean">
...
  <annotation expr="!class(@org.jboss.annotation.ejb.PoolClass)">
     @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class, maxSize=30, timeout=10000)
  </annotation>
</domain>

这里有一些链接可以让你了解一些......

JBoss 中的无状态会话 bean 池

在每个 onMessage MDB 调用上注入的新资源实例

ThreadlocalPool 不会从 InfinitePool 中移除活动的 BeanContext 实例

于 2012-08-18T05:07:15.070 回答