【问题标题】:ehcache 2.8.5 seems hold 1 million entries at mostehcache 2.8.5 似乎最多容纳 100 万个条目
【发布时间】:2018-03-25 06:22:45
【问题描述】:

最近,我们打开了生产服务器的ehcache jmx接口,并启动了持续监控。

在监控的时候,我们发现一个小对象的缓存似乎有一个上限,大概是100万。

这是监控图,有一个上限。图的y轴是缓存中的ObjectCount,是通过ehcache jmx接口获取的。

graph ehcache object count

我们的缓存设置是这样的:

<cache name="prodStockApiEhCache" maxBytesLocalHeap="200M" overflowToDisk="false" eternal="false" timeToIdleSeconds="240" timeToLiveSeconds="360" memoryStoreEvictionPolicy="LRU" />

缓存管理器级别没有指定配置。

我们的缓存类是这样的:

public class ProductStock {

    private long productId;

    private int productCount;

    private int pickingCount;

    private int lackType;

    private int areaSale;

    //getter and setter....
}

我们研究了ehcache的对象大小估计方法,它使用了google的sizeof-agent.jar。

我们使用 sizeof-agent.jar 进行测试。我们类的实例堆大小约为 40 字节。如果我们乘以 100 万,则等于 40M,远小于我们配置的 200M。

另外,我们搜索了 ehcache(2.8.5) 的源码,并没有发现任何 100 万的限制。另外,我们在eclipse调试模型中检查了ehcachemanager实例的配置,maxEntriesOnHeap为0,表示没有限制。

这是有线的,有没有我们遗漏的信息?监控图的内涵对吗?

【问题讨论】:

    标签: java caching ehcache


    【解决方案1】:

    据我所知,没有 1 000 000 个条目的限制。你能提供完整的ehcache.xml吗?

    您查看过 JMX 统计信息吗?有驱逐吗?

    【讨论】:

    • 谢谢亨利。我们在一个小型测试项目中测试其他“maxBytesLocalHeap”值。结果是这样的:当maxBytesLocalHeap=100M时,我们可以缓存72.9万个对象;当 maxBytesLocalHeap=200M 时,我们可以缓存 139 万个对象;当 maxBytesLocalHeap=300M 时,我们可以缓存 145.6 万个对象。该测试以另一种方式证明没有 100 万个条目的限制。可能是 Ehcache 不仅计算缓存对象的本地堆字节数。可能还有其他需要包含的对象。
    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多