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