ehcache 2.8.5似乎最多可容纳100万个条目
问题描述:
最近,我们打开了生产服务器的ehcache jmx接口,并启动了连续监视器。ehcache 2.8.5似乎最多可容纳100万个条目
当监控时,我们发现一个小物件的缓存似乎有一个上限容量,就好像是100万。
这是监视器图形,它有一个上限量。图形的y轴是缓存中的ObjectCount,通过ehcache jmx接口获取。
我们的缓存设置是这样的:
<cache name="prodStockApiEhCache" maxBytesLocalHeap="200M" overflowToDisk="false" eternal="false" timeToIdleSeconds="240" timeToLiveSeconds="360" memoryStoreEvictionPolicy="LRU" />
有在CacheManager的水平没有指定的配置。
我们缓存类是这样的:
public class ProductStock {
private long productId;
private int productCount;
private int pickingCount;
private int lackType;
private int areaSale;
//getter and setter....
}
我们reseached的Ehcache的对象规模估算方法,它使用谷歌的的sizeof-agent.jar中。
我们用sizeof-agent.jar进行测试。我们班的实例堆大小约为40字节。如果我们多达100万,就等于40M,远远低于我们配置的200M。
另外,我们找到了ehcache(2.8.5)的来源,并没有发现任何100万的限制。另外,我们在eclipse调试模型中检查了ehcachemanager实例的配置,maxEntriesOnHeap为0,这意味着没有限制。
这是有线的,有没有我们错过的任何信息?监测图的内涵是否正确?
答
我没有注意到1 000 000个条目的限制。你能提供完整的ehcache.xml
吗?
你看过JMX的统计数据吗?有没有驱逐?
谢谢亨利。我们在一个小测试项目中测试其他“maxBytesLocalHeap”值。结果如下:当maxBytesLocalHeap = 100M时,我们可以缓存729000个对象;当maxBytesLocalHeap = 200M时,我们可以缓存139万个对象;当maxBytesLocalHeap = 300M时,我们可以缓存144万个对象。这个测试证明没有一百万条目以另一种方式限制。可能是Ehcache不仅计算缓存对象本地堆字节。可能还有其他需要包含的对象。 – eric