本番環境で大規模な VM を実行しており、実行時のキャッシュ サイズについて詳しく知りたいと考えています。私のキャッシュはすべて ehache に基づいています
実行時に個々のキャッシュのサイズを確認する最良の方法は何ですか? JMXまたはAPIのいずれかを使用
CacheManager へのplain-old-java呼び出しによって構成するオプションはありますか、または(今のところJMXを無視して)XML構成スラッグを大きな文字列で構築する必要がありますか?
EhCache 3 (少なくとも私が使用している 3.5 バージョン) では、キャッシュ統計からキャッシュ サイズにアクセスできます。
まず、統計サービスをキャッシュ マネージャーに登録する必要があります。
StatisticsService statisticsService = new DefaultStatisticsService();
CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.using(statisticsService)
.build();
cacheManager.init();
次に、キャッシュの統計を取得できます。これには層ごとのサイズが含まれています (EhCache 3 では、ヒープ、ディスク、オフヒープの 3 つの異なる層があります)。
CacheStatistics ehCacheStat = statisticsService.getCacheStatistics("myCache");
ehCacheStat.getTierStatistics().get("OnHeap").getMappings();//nb element in heap tier
ehCacheStat.getTierStatistics().get("OnHeap").getOccupiedByteSize()//size of the tier
JMX は間違いなく実行可能なソリューションです。EhCache doc には、これ専用のページがあります。
JMX 経由で EhCache を構成する例を次に示します。リンクされた記事には Spring 構成が含まれていますが、Spring を使用していない場合はネイティブ Java に簡単に変換できます。