【问题标题】:Troubleshoot EJB cachefull exceptions排查 EJB 缓存满异常
【发布时间】:2013-01-03 20:47:51
【问题描述】:

参考问题: : EJB weblogic.ejb20.cache.CacheFullException

我试图了解 EJB 容器如何管理实体 bean,我知道对 EJBHome 对象的 create/finder 方法调用会导致 Bean 实例加载到缓存中,但是是否有任何其他操作/配置会导致 bean正在加载到缓存中(例如:容器管理的关系)?

我还在 weblogic 控制台中看到缓存访问计数(百万)的值非常高。如何将这些值追溯到代码?

我将 max-beans-in-cache 设置为 8000。

【问题讨论】:

    标签: java ejb weblogic ejb-2.x weblogic8.x


    【解决方案1】:

    这个链接解释了一点,但我你可能已经知道这个http://docs.oracle.com/cd/E11035_01/wls100/perform/EJBTuning.html#wp1143320

    需要注意的是,每个实体 bean 都映射到数据库中的一条记录,因此使用 8000 的 max-beans-in-cache 可以有效地存储最多 8000 条不同的记录。根据您选择的并发策略,您甚至可以拥有少于 8000 个唯一记录,因为允许缓存存储具有相同主键的多个 ejb 实例。

    从代码的角度来看,我认为对 ejbActivate() 的调用将使用缓存中的现有 bean 或将池中的 bean 放入缓存中。因此,您可以在 ejbactivate 中尝试一些日志记录方法来计算它被访问的次数。不过我不确定。

    如果您的缓存访问计数以百万计,那么缓存命中和未命中计数呢?以 8000 作为 Cache 值,Cache Hits 是否足够成功。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      相关资源
      最近更新 更多