【问题标题】:Stateless ejb does not remove the pool无状态 ejb 不移除池
【发布时间】:2012-08-17 21:23:48
【问题描述】:

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

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

【问题讨论】:

  • @TiagoBraga FYI - 如果您使用 EAP,您可以直接联系 JBoss 支持。
  • 好的,但我在这里询问是否可以找到快速答案。谢谢。
  • 另外,我把这个问题分享给其他没有jboss支持的人解决。 :)

标签: java memory-leaks jboss ejb


【解决方案1】:

您遇到了一个可怕的错误,即 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

【讨论】:

  • 感谢您的回复!我有另一个项目,它也有 EJB,并且已从池中正确删除(“删除计数”随着时间的推移而增加)。唯一的区别是我现在的那个有 EJB 定时器。是不是因为这个才出现bug?
  • “删除计数”在任何时候都没有增加。在这种情况下,它创建 ejb 实例的速度较慢,但​​达到了限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 2013-03-19
  • 1970-01-01
相关资源
最近更新 更多