프로덕션 환경에서 대규모 VM을 실행 중이며 런타임시 캐시 크기에 대해 더 알고 싶습니다. 내 캐시는 모두 에아 슈를 기반으로합니다.런타임시 Ehcache 캐시 크기
런타임시 개별 캐시의 크기를 확인하는 가장 좋은 방법은 무엇입니까? JMX 또는 API 사용
CacheManager에 대한 plain-old-java 호출로 구성하거나 (큰 순간에 XML 구성 슬러그를 빌드해야하는 경우 JMX를 무시하는 옵션이 있습니까?
프로덕션 환경에서 대규모 VM을 실행 중이며 런타임시 캐시 크기에 대해 더 알고 싶습니다. 내 캐시는 모두 에아 슈를 기반으로합니다.런타임시 Ehcache 캐시 크기
런타임시 개별 캐시의 크기를 확인하는 가장 좋은 방법은 무엇입니까? JMX 또는 API 사용
CacheManager에 대한 plain-old-java 호출로 구성하거나 (큰 순간에 XML 구성 슬러그를 빌드해야하는 경우 JMX를 무시하는 옵션이 있습니까?
예, Ehcache를 사용하면 캐시를 구성하고 Java 코드로만 크기를 검색 할 수 있습니다 (XML 구성 없음). 모든 것을 통합하는 정확한 방법은 특정 아키텍처에 달려 있습니다. 나는 저지 (Jersey)가 의존성 주입을 위해 API와 Guice를하고 있다고 가정 할 것이다.
캐시 정의
의존성 주입을 통해 캐시 관리자가 사용할 수 있도록합니다. 이것은 Guice 모듈을 통해 수행 할 수 있습니다 통계가 mycache
에 대해 설정되어
@Provides
@Singleton
CacheManager provideCacheManager() {
CacheManager cacheManager = CacheManager.create();
/* very basic cache configuration */
CacheConfiguration config = new CacheConfiguration("mycache", 100)
.timeToLiveSeconds(60)
.timeToIdleSeconds(30)
.statistics(true);
Cache myCache = new Cache(config);
cacheManager.addCacheIfAbsent(myCache);
return cacheManager;
}
공지있다.
다시 말해 캐시를 완전히 Java 코드로 수행 할 수 있지만 아키텍처와 디자인에 따라 다릅니다. 일반적으로 (AOP를 통해) 메소드 인터셉트를 사용하여 이것을 수행하지만, 이는 또 다른 주제입니다. 이제 당신을
@Path("stats")
@Produces("text/plain")
public class StatsResource {
@Inject private CacheManager cacheManager;
@GET
public String stats() {
StringBuffer sb = StringBuffer();
/* get stats for all known caches */
for (String name : cacheManager.getCacheNames()) {
Cache cache = cacheManager.getCache(name);
Statistics stats = cache.getStatistics();
sb.append(String.format("%s: %s objects, %s hits, %s misses\n",
name,
stats.getObjectCount(),
stats.getCacheHits(),
stats.getCacheMisses()
));
}
return sb.toString();
}
}
:
은 CacheManager
당신이 다음 REST 엔드 포인트로 묶을 및 캐시 통계에 대한 액세스를 허용 할 수 있습니다 의존성 주입을 통해 볼 수 있습니다
가 주어 REST API를 통해 캐시 통계 가져 오기 REST 통화를 통해 캐시에 대한 정보를 가져올 수 있습니다.
GET /stats
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
mycache: 8 objects, 59 hits, 12 misses
JMX는 어떻습니까?
Ehcache를 사용하면 캐시 관리자를 MBean 서버에 쉽게 등록 할 수 있습니다. Java 코드로 수행 할 수 있습니다. 당신의 cacheManager
시스템 MBeanServer
에 등록, 당신의 Guice 모듈을 업데이트 :
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ManagementService.registerMBeans(cacheManager, mBeanServer, false, false, false, true);
지금 당신은 당신의 자바 프로세스에 JConsole의 첨부 MBean의 net.sf.ehcache.CacheStatistics
에서 캐시 통계를 확인할 수 있습니다.
JMX는 확실히 실행 가능한 솔루션입니다. EhCache 의사는 특별히 이것을 위해 page을 가지고 있습니다.
Here's an example JMX를 통해 EhCache를 구성하는 중입니다. 링크 된 기사에는 Spring 설정이 포함되어 있지만 Spring을 사용하지 않는다면 기본 Java로 쉽게 변환 할 수 있습니다.
캐시에서 힙 사용을 어떻게 얻습니까? 위의 예제에서 - 8 개의 객체가 힙에서 차지하는 바이트 수는 얼마입니까? 우리는 여러 개의 ehcache 인스턴스가 있고 캐시의 힙 사용법을 제공하는 솔루션을 찾고 있습니다. –
버전 2.6부터 시작하는 ehcache는 maxBytesOnLocalHeap()을 사용하여 캐시를 구성하는 방법을 제공합니다. heap usage - http://ehcache.org/documentation/2를 계산하는 것이 편리 할 것입니다.6/configuration/cache-size # local-heap –
Ehcache가 더 이상 getObjectCount()를 제공하지 않는 것 같습니다. 대안이 있습니까? – markthegrea