2017-10-13 5 views
0

최근에 프로덕션 서버의 ehcache jmx 인터페이스를 열고 연속 모니터를 시작했습니다.ehcache 2.8.5는 1 백 만개의 항목을 보유하고있는 것 같습니다.

모니터링 할 때 작은 개체의 캐시에는 천장 용량 (1 백만)이있는 것으로 나타났습니다.

이것은 천장이있는 모니터 그래프입니다. 그래프의 y 축은 ehcache jmx 인터페이스를 통해 얻은 캐시의 ObjectCount입니다.

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.... 
} 

우리는으로 Ehcache의 객체 크기 추정 방법을 reseached, 그것은 구글의를 sizeof - agent.jar를 사용합니다.

우리는 sizeof-agent.jar로 테스트합니다. 클래스의 인스턴스 힙 크기는 약 40 바이트입니다. 우리가 100 만 명을 곱하면, 우리가 설정 한 200M보다 훨씬 적은 40M이됩니다.

또한 우리는 ehcache (2.8.5)의 소스를 검색하여 1 백만 개의 제한을 찾지 못했습니다. 또한 eclipse 디버그 모델에서 ehcachemanager 인스턴스의 구성을 확인했습니다. maxEntriesOnHeap은 0으로 제한이 없습니다.

이것은 유선입니다. 우리가 놓친 정보가 있습니까? 모니터링 그래프의 함축적 의미입니까?

답변

0

내가 알고있는 1 000 000 항목 제한이 없습니다. ehcache.xml 전체를 제공 할 수 있습니까?

JMX 통계가 보입니까? 퇴거가 있습니까?

+0

감사합니다. Henri. 우리는 작은 테스트 프로젝트에서 다른 "maxBytesLocalHeap"값을 테스트합니다. 결과는 다음과 같습니다 : maxBytesLocalHeap = 100M 일 때, 729000 개의 객체를 캐싱 할 수 있습니다. maxBytesLocalHeap = 200M 일 때, 1.39 백만 개의 객체를 캐싱 할 수 있습니다. maxBytesLocalHeap = 300M 일 때 우리는 145 만 개의 개체를 캐시 할 수 있습니다. 이 테스트는 다른 방식으로 1 백만 항목 제한이 없음을 증명합니다. Ehcache는 캐시 된 객체 로컬 힙 바이트뿐만 아니라 계산할 수도 있습니다. 다른 개체가 포함될 필요가있을 수 있습니다. – eric