无状态ejb不会删除池

时间:2012-08-17 21:23:48

标签: java memory-leaks jboss ejb

我遇到内存泄漏问题,因为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”?

1 个答案:

答案 0 :(得分:3)

你已经遇到了一个可怕的错误,SLSB没有被清理和泄露......我们几周前在我们的生产环境中遇到过这个问题......

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

您应该修改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>

以下是一些链接,可以为您提供一些见解......

Stateless session bean pooling in JBoss

New instance of resources injected on every onMessage MDB call

ThreadlocalPool does not remove active BeanContext instances from InfinitePool