2017-10-13 70 views
0

最近,我们打开了生产服务器的ehcache jmx接口,并启动了连续监视器。ehcache 2.8.5似乎最多可容纳100万个条目

当监控时,我们发现一个小物件的缓存似乎有一个上限容量,就好像是100万。

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

graph ehcache object count

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

<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,这意味着没有限制。

这是有线的,有没有我们错过的任何信息?监测图的内涵是否正确?

回答

0

我没有注意到1 000 000个条目的限制。你能提供完整的ehcache.xml吗?

你看过JMX的统计数据吗?有没有驱逐?

+0

谢谢亨利。我们在一个小测试项目中测试其他“maxBytesLocalHeap”值。结果如下:当maxBytesLocalHeap = 100M时,我们可以缓存729000个对象;当maxBytesLocalHeap = 200M时,我们可以缓存139万个对象;当maxBytesLocalHeap = 300M时,我们可以缓存144万个对象。这个测试证明没有一百万条目以另一种方式限制。可能是Ehcache不仅计算缓存对象本地堆字节。可能还有其他需要包含的对象。 – eric