2017-10-13 164 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