From ea2915c476e38f489fa2e32c4b15259b076766b2 Mon Sep 17 00:00:00 2001 From: Balazs Meszaros Date: Tue, 3 Jul 2018 14:45:58 +0200 Subject: [PATCH] HBASE-20549 Dead MBean: Hadoop:service=HBase,sub=Memory,name=RegionServer blockCacheSize and memStoreSize metrics are published independently from auto tuner. --- .../hbase/regionserver/HeapMemoryManager.java | 41 +++++++++++-------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java index c32fce2aec..2add6c6c8c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java @@ -252,8 +252,7 @@ public class HeapMemoryManager { Class tunerKlass = server.getConfiguration().getClass( HBASE_RS_HEAP_MEMORY_TUNER_CLASS, DefaultHeapMemoryTuner.class, HeapMemoryTuner.class); heapMemTuner = ReflectionUtils.newInstance(tunerKlass, server.getConfiguration()); - tunerContext - .setOffheapMemStore(regionServerAccounting.isOffheap()); + tunerContext.setOffheapMemStore(regionServerAccounting.isOffheap()); } @Override @@ -295,38 +294,44 @@ public class HeapMemoryManager { } } // Autotune if tuning is enabled and allowed - if (tunerOn && !alarming) { - tune(); - } + tune(tunerOn && !alarming); } - private void tune() { + private void tune(boolean autotune) { + long currentSize = blockCache.getCurrentSize(); + metricsHeapMemoryManager.setCurBlockCacheSizeGauge(currentSize); + + long globalMemstoreHeapSize = regionServerAccounting.getGlobalMemStoreHeapSize(); + metricsHeapMemoryManager.setCurMemStoreSizeGauge(globalMemstoreHeapSize); + + if (!autotune) { + return; + } + // TODO check if we can increase the memory boundaries // while remaining in the limits - long curEvictCount; - long curCacheMisCount; - long blockedFlushCnt; - long unblockedFlushCnt; - curEvictCount = blockCache.getStats().getEvictedCount(); + long curEvictCount = blockCache.getStats().getEvictedCount(); tunerContext.setEvictCount(curEvictCount - evictCount); evictCount = curEvictCount; - curCacheMisCount = blockCache.getStats().getMissCachingCount(); + + long curCacheMisCount = blockCache.getStats().getMissCachingCount(); tunerContext.setCacheMissCount(curCacheMisCount-cacheMissCount); cacheMissCount = curCacheMisCount; - blockedFlushCnt = blockedFlushCount.getAndSet(0); + + long blockedFlushCnt = blockedFlushCount.getAndSet(0); tunerContext.setBlockedFlushCount(blockedFlushCnt); metricsHeapMemoryManager.updateBlockedFlushCount(blockedFlushCnt); - unblockedFlushCnt = unblockedFlushCount.getAndSet(0); + + long unblockedFlushCnt = unblockedFlushCount.getAndSet(0); tunerContext.setUnblockedFlushCount(unblockedFlushCnt); metricsHeapMemoryManager.updateUnblockedFlushCount(unblockedFlushCnt); + // TODO : add support for offheap metrics - tunerContext.setCurBlockCacheUsed((float) blockCache.getCurrentSize() / maxHeapSize); - metricsHeapMemoryManager.setCurBlockCacheSizeGauge(blockCache.getCurrentSize()); - long globalMemstoreHeapSize = regionServerAccounting.getGlobalMemStoreHeapSize(); + tunerContext.setCurBlockCacheUsed((float) currentSize / maxHeapSize); tunerContext.setCurMemStoreUsed((float) globalMemstoreHeapSize / maxHeapSize); - metricsHeapMemoryManager.setCurMemStoreSizeGauge(globalMemstoreHeapSize); tunerContext.setCurBlockCacheSize(blockCachePercent); tunerContext.setCurMemStoreSize(globalMemStorePercent); + TunerResult result = null; try { result = this.heapMemTuner.tune(tunerContext); -- 2.17.0