최근에 프로덕션 서버의 ehcache jmx 인터페이스를 열고 연속 모니터를 시작했습니다.ehcache 2.8.5는 1 백 만개의 항목을 보유하고있는 것 같습니다.
모니터링 할 때 작은 개체의 캐시에는 천장 용량 (1 백만)이있는 것으로 나타났습니다.
이것은 천장이있는 모니터 그래프입니다. 그래프의 y 축은 ehcache jmx 인터페이스를 통해 얻은 캐시의 ObjectCount입니다.
우리의 캐시 설정은 다음과 같이이다 :
<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으로 제한이 없습니다.
이것은 유선입니다. 우리가 놓친 정보가 있습니까? 모니터링 그래프의 함축적 의미입니까?
감사합니다. Henri. 우리는 작은 테스트 프로젝트에서 다른 "maxBytesLocalHeap"값을 테스트합니다. 결과는 다음과 같습니다 : maxBytesLocalHeap = 100M 일 때, 729000 개의 객체를 캐싱 할 수 있습니다. maxBytesLocalHeap = 200M 일 때, 1.39 백만 개의 객체를 캐싱 할 수 있습니다. maxBytesLocalHeap = 300M 일 때 우리는 145 만 개의 개체를 캐시 할 수 있습니다. 이 테스트는 다른 방식으로 1 백만 항목 제한이 없음을 증명합니다. Ehcache는 캐시 된 객체 로컬 힙 바이트뿐만 아니라 계산할 수도 있습니다. 다른 개체가 포함될 필요가있을 수 있습니다. – eric