-
轉載請注明出處哈: http://carlosfu.iteye.com/blog/2237511
- Ehcache預設啟動jmx,對Ehcache的使用狀态、配置和統計資訊進行監控。
一、使用狀态:

-
Name: 緩存名
-
Status: 狀态
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 -
TerracottaClustered: 是否是bigmemory叢集模式(bigmemory max)
二、配置資訊:
(對應到ehcache.xml中的自定義配置和預設配置)
-
DiskExpiryThreadIntervalSeconds: 每xx秒檢查硬碟的資料是否有過期的
-
DiskPersistent: 是否做硬碟持久化
-
DiskSpoolBufferSizedMB: 硬碟緩存區尺寸(機關:MB)
-
Eternal: 對象是否永久,如果是true的話,TimeToIdleSeconds和TimeToLiveSeconds的配置都會無效。
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 -
LoggingEnabled: 是否啟動日志
-
MaxBytesLocalDisk: 硬碟最大存儲量(機關是位元組)
-
MaxBytesLocalHeap: 堆内最大存儲量(機關是位元組)
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 -
MaxMemoryOffHeapInBytes: 設定對外記憶體的最大尺寸(機關是位元組)
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 -
MaxBytesLocalOffHeap: 堆外最大存儲量(機關是位元組)(8和9貌似是一樣的)
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 -
MaxElementsInMemory: 記憶體最大Elements個數
-
MaxElementsOnDisk: 硬碟最大Elements個數
-
MaxEntriesLocalDisk: 硬碟最大Entries個數
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 -
MaxEntriesLocalHeap: 堆内最大Entries個數
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 -
TimeToIdleSeconds: 對象最大空閑時間(超過空閑時間且超過設定的Max,可能參與到對象的删除政策中)
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 -
TimeToLiveSeconds: 對象的最大存活時間,也就是對象的過期時間。
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 -
OverflowToDisk: OffHeap如果滿了,是否flow到硬碟。(預設是false, 如果為false,所有和硬碟相關的配置都不生效)
-
OverflowToOffHeap: Heap如果滿了,是否flow到OffHeap。
-
Name: 緩存名
-
-
MemoryStoreEvictionPolicy: 堆内Eviction政策(預設是LRU)
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511 BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
MaxEntries和MaxBytes,一般來說是不共用的。
如果能預估對象個數,但是容量不确定,可以用MaxEntries
如果能預估容量,但是對象個數不确定,可以用MaxBytes
三、統計資訊:
1. AssociatedCachedName: cache的名稱,對應ehcache.xml中的<cache name="mobilServiceOffHeap".../>
2. CacheHitPercentage: 總緩存命中率
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
3. CacheHits: 總緩存命中數
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
4. CacheMissPercentage: 總緩存丢失率
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
5. CacheMisses: 總緩存丢失數
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
6. DiskStoreObjectCount: 硬碟中存儲的對象個數 (配置中DiskPersistent必須為true)
7. InMemoryHitPercentage: 堆内命中率
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
8. InMemoryHits: 堆内命中數
9. InMemoryMisses: 堆内丢失數
11. MemoryStoreObjectCount: 堆記憶體儲對象個數
11. OffHeapStoreObjectCount: 堆外存儲對象個數
12. OffHeapHitPercentage: 堆外命中率
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
13. OffHeapHits: 堆外命中數
14. OffHeapMisses: 堆外丢失數
15. OnDiskHitPercentage: 堆外命中率
16. OnDiskHits: 堆外命中數
17. OnDiskMisses: 堆外丢失數
18. ObjectCount: 總對象個數
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
BigMemory系列文章--5. Ehcache配置和統計資料 轉載請注明出處哈:http://carlosfu.iteye.com/blog/2237511
如果目前cache是offheapCache,那麼總對象數 = OffHeapStoreObjectCount + DiskStoreObjectCount (可能InMemory是Offheap的熱點資料,認為是一個對象)
如果目前cache是heapCache,那麼總對象數 = InMemoryStoreObjectCount + DiskStoreObjectCount
19. WriterMaxQueueSize: the maximum size of the write-behind queue (應該是寫硬碟的線程,用到的隊列)
20. WriteQueueLength: the size of the write-behind queue(應該是寫硬碟的線程,用到的隊列)
四、自定義統計資訊
1. 除了預設的統計資訊,可以調用ehcache api擷取更加全面的統計資訊,實作自己來定制統計。
package com.sohu.tv.mobil.common.jmx;
import java.util.List;
public interface EhcacheExtendWatcherMBean {
/**
* 擷取延遲結果
*
* @return
*/
List<String> getGlobalResult();
/**
* 擷取剔除數量
*
* @return
*/
long getEvictedCount();
/**
* 擷取逾時數量
*
* @return
*/
long getExpiredCount();
/**
* 擷取未命中統計
*
* @return
*/
List<String> getMissStatisticsMap();
}
package com.sohu.tv.mobil.common.jmx.impl;
import com.sohu.tv.mobil.common.jmx.EhcacheExtendWatcherMBean;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.statistics.StatisticsGateway;
import net.sf.ehcache.statistics.extended.ExtendedStatistics;
import java.util.ArrayList;
import java.util.List;
public class EhcacheExtendWatcher implements EhcacheExtendWatcherMBean {
private Ehcache ehcache;
@Override
public List<String> getGlobalResult() {
ExtendedStatistics extendedStatistics = ehcache.getStatistics().getExtended();
ExtendedStatistics.Result getResult = extendedStatistics.allGet();
ExtendedStatistics.Result putResult = extendedStatistics.allPut();
ExtendedStatistics.Result missResult = extendedStatistics.allMiss();
List<String> resultList = new ArrayList<String>();
String getStr =
"allGet:count=" + getResult.count().value() + ";rate=" + getResult.rate().value()
+ ";latency:average=" + getResult.latency().average().value() + ";minimum="
+ getResult.latency().minimum().value() + ";maximum=" + getResult.latency()
.maximum().value();
String putStr =
"allPut:count=" + putResult.count().value() + ";rate=" + putResult.rate().value()
+ ";latency:average=" + putResult.latency().average().value() + ";minimum="
+ putResult.latency().minimum().value() + ";maximum=" + putResult.latency()
.maximum().value();
String missStr =
"allMiss:count=" + missResult.count().value() + ";rate=" + missResult.rate().value()
+ ";latency:average=" + missResult.latency().average().value() + ";minimum="
+ missResult.latency().minimum().value() + ";maximum=" + missResult.latency()
.maximum().value();
resultList.add(getStr);
resultList.add(putStr);
resultList.add(missStr);
return resultList;
}
@Override
public long getEvictedCount() {
StatisticsGateway statisticsGateway = ehcache.getStatistics();
return statisticsGateway.cacheEvictedCount();
}
@Override
public long getExpiredCount() {
StatisticsGateway statisticsGateway = ehcache.getStatistics();
return statisticsGateway.cacheExpiredCount();
}
@Override
public List<String> getMissStatisticsMap() {
StatisticsGateway statisticsGateway = ehcache.getStatistics();
ExtendedStatistics.Result missResult = statisticsGateway.cacheMissOperation();
ExtendedStatistics.Result missExpiredResult = statisticsGateway.cacheMissExpiredOperation();
ExtendedStatistics.Result missMissNotFoundResult =
statisticsGateway.cacheMissNotFoundOperation();
String missResultStr =
"missResult:count=" + missResult.count().value() + ";rate=" + missResult.rate().value()
+ ";latency:average=" + missResult.latency().average().value() + ";minimum="
+ missResult.latency().minimum().value() + ";maximum=" + missResult.latency()
.maximum().value();
String missExpiredResultStr =
"missExpiredResult:count=" + missExpiredResult.count().value() + ";rate="
+ missExpiredResult.rate().value() + ";latency:average=" + missExpiredResult
.latency().average().value() + ";minimum=" + missExpiredResult.latency().minimum()
.value() + ";maximum=" + missExpiredResult.latency().maximum().value();
String missMissNotFoundResultStr =
"missMissNotFoundResult:count=" + missMissNotFoundResult.count().value() + ";rate="
+ missMissNotFoundResult.rate().value() + ";latency:average="
+ missMissNotFoundResult.latency().average().value() + ";minimum="
+ missMissNotFoundResult.latency().minimum().value() + ";maximum="
+ missMissNotFoundResult.latency().maximum().value();
List<String> resultList = new ArrayList<String>();
resultList.add(missResultStr);
resultList.add(missExpiredResultStr);
resultList.add(missMissNotFoundResultStr);
return resultList;
}
public void setEhcache(Ehcache ehcache) {
this.ehcache = ehcache;
}
}
2. 實作效果:
3. 重要統計說明:
EvictedCount: 剔除個數(記憶體滿之後)
ExpiredCount: 過期個數 (如果設定了單個KEY的過期時間或者全局的TimeToLive就會出現)
GlobalResult: 包含各個指令的調用次數,各種響應時間,QPS(rate)