最近,我們打開了生產服務器的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,這意味着沒有限制。
這是有線的,有沒有我們錯過的任何信息?監測圖的內涵是否正確?
謝謝亨利。我們在一個小測試項目中測試其他「maxBytesLocalHeap」值。結果如下:當maxBytesLocalHeap = 100M時,我們可以緩存729000個對象;當maxBytesLocalHeap = 200M時,我們可以緩存139萬個對象;當maxBytesLocalHeap = 300M時,我們可以緩存144萬個對象。這個測試證明沒有一百萬條目以另一種方式限制。可能是Ehcache不僅計算緩存對象本地堆字節。可能還有其他需要包含的對象。 – eric