Skip to content

Commit b9dbccc

Browse files
jinggouvirajjasani
authored andcommitted
HBASE-27948 Report memstore on-heap and off-heap size as jmx metrics in sub=Memory bean (#5293)
Signed-off-by: Viraj Jasani <vjasani@apache.org>
1 parent 24a345a commit b9dbccc

File tree

6 files changed

+62
-4
lines changed

6 files changed

+62
-4
lines changed

hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsHeapMemoryManagerSource.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,18 @@ public interface MetricsHeapMemoryManagerSource extends BaseSource {
7070
*/
7171
void setCurMemStoreSizeGauge(long memStoreSize);
7272

73+
/**
74+
* Set the current global memstore on-heap size used gauge
75+
* @param memStoreOnHeapSize the current memory usage in memstore on-heap, in bytes.
76+
*/
77+
void setCurMemStoreOnHeapSizeGauge(long memStoreOnHeapSize);
78+
79+
/**
80+
* Set the current global memstore off-heap size used gauge
81+
* @param memStoreOffHeapSize the current memory usage in memstore off-heap, in bytes.
82+
*/
83+
void setCurMemStoreOffHeapSizeGauge(long memStoreOffHeapSize);
84+
7385
/**
7486
* Update the increase/decrease memstore size histogram
7587
* @param memStoreDeltaSize the tuning result of memstore.
@@ -118,6 +130,13 @@ public interface MetricsHeapMemoryManagerSource extends BaseSource {
118130
String UNBLOCKED_FLUSH_GAUGE_DESC = "Gauge for the unblocked flush count before tuning";
119131
String MEMSTORE_SIZE_GAUGE_NAME = "memStoreSize";
120132
String MEMSTORE_SIZE_GAUGE_DESC = "Global MemStore used in bytes by the RegionServer";
133+
String MEMSTORE_ONHEAP_SIZE_GAUGE_NAME = "memStoreOnHeapSize";
134+
String MEMSTORE_ONHEAP_SIZE_GAUGE_DESC =
135+
"Global MemStore On-heap size in bytes by the RegionServer";
136+
String MEMSTORE_OFFHEAP_SIZE_GAUGE_NAME = "memStoreOffHeapSize";
137+
String MEMSTORE_OFFHEAP_SIZE_GAUGE_DESC =
138+
"Global MemStore Off-heap size in bytes by the RegionServer";
139+
121140
String BLOCKCACHE_SIZE_GAUGE_NAME = "blockCacheSize";
122141
String BLOCKCACHE_SIZE_GAUGE_DESC = "BlockCache used in bytes by the RegionServer";
123142

hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsHeapMemoryManagerSourceImpl.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public class MetricsHeapMemoryManagerSourceImpl extends BaseSourceImpl
4141
private final MutableGaugeLong blockedFlushGauge;
4242
private final MutableGaugeLong unblockedFlushGauge;
4343
private final MutableGaugeLong memStoreSizeGauge;
44+
private final MutableGaugeLong memStoreOnHeapSizeGauge;
45+
private final MutableGaugeLong memStoreOffHeapSizeGauge;
4446
private final MutableGaugeLong blockCacheSizeGauge;
4547

4648
private final MutableFastCounter doNothingCounter;
@@ -75,6 +77,10 @@ public MetricsHeapMemoryManagerSourceImpl(String metricsName, String metricsDesc
7577
getMetricsRegistry().newGauge(UNBLOCKED_FLUSH_GAUGE_NAME, UNBLOCKED_FLUSH_GAUGE_DESC, 0L);
7678
memStoreSizeGauge =
7779
getMetricsRegistry().newGauge(MEMSTORE_SIZE_GAUGE_NAME, MEMSTORE_SIZE_GAUGE_DESC, 0L);
80+
memStoreOnHeapSizeGauge = getMetricsRegistry().newGauge(MEMSTORE_ONHEAP_SIZE_GAUGE_NAME,
81+
MEMSTORE_ONHEAP_SIZE_GAUGE_DESC, 0L);
82+
memStoreOffHeapSizeGauge = getMetricsRegistry().newGauge(MEMSTORE_OFFHEAP_SIZE_GAUGE_NAME,
83+
MEMSTORE_OFFHEAP_SIZE_GAUGE_DESC, 0L);
7884
blockCacheSizeGauge =
7985
getMetricsRegistry().newGauge(BLOCKCACHE_SIZE_GAUGE_NAME, BLOCKCACHE_SIZE_GAUGE_DESC, 0L);
8086

@@ -111,6 +117,16 @@ public void setCurMemStoreSizeGauge(long memstoreSize) {
111117
memStoreSizeGauge.set(memstoreSize);
112118
}
113119

120+
@Override
121+
public void setCurMemStoreOnHeapSizeGauge(long memstoreOnHeapSize) {
122+
memStoreOnHeapSizeGauge.set(memstoreOnHeapSize);
123+
}
124+
125+
@Override
126+
public void setCurMemStoreOffHeapSizeGauge(long memstoreOffHeapSize) {
127+
memStoreOffHeapSizeGauge.set(memstoreOffHeapSize);
128+
}
129+
114130
@Override
115131
public void updateMemStoreDeltaSizeHistogram(int memStoreDeltaSize) {
116132
if (memStoreDeltaSize >= 0) {

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,12 +317,15 @@ private void tune() {
317317
unblockedFlushCnt = unblockedFlushCount.getAndSet(0);
318318
tunerContext.setUnblockedFlushCount(unblockedFlushCnt);
319319
metricsHeapMemoryManager.updateUnblockedFlushCount(unblockedFlushCnt);
320-
// TODO : add support for offheap metrics
321320
tunerContext.setCurBlockCacheUsed((float) blockCache.getCurrentSize() / maxHeapSize);
322321
metricsHeapMemoryManager.setCurBlockCacheSizeGauge(blockCache.getCurrentSize());
322+
long globalMemstoreDataSize = regionServerAccounting.getGlobalMemStoreDataSize();
323323
long globalMemstoreHeapSize = regionServerAccounting.getGlobalMemStoreHeapSize();
324+
long globalMemStoreOffHeapSize = regionServerAccounting.getGlobalMemStoreOffHeapSize();
324325
tunerContext.setCurMemStoreUsed((float) globalMemstoreHeapSize / maxHeapSize);
325-
metricsHeapMemoryManager.setCurMemStoreSizeGauge(globalMemstoreHeapSize);
326+
metricsHeapMemoryManager.setCurMemStoreSizeGauge(globalMemstoreDataSize);
327+
metricsHeapMemoryManager.setCurMemStoreOnHeapSizeGauge(globalMemstoreHeapSize);
328+
metricsHeapMemoryManager.setCurMemStoreOffHeapSizeGauge(globalMemStoreOffHeapSize);
326329
tunerContext.setCurBlockCacheSize(blockCachePercent);
327330
tunerContext.setCurMemStoreSize(globalMemStorePercent);
328331
TunerResult result = null;

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsHeapMemoryManager.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,22 @@ public void setCurMemStoreSizeGauge(final long memStoreSize) {
7373
source.setCurMemStoreSizeGauge(memStoreSize);
7474
}
7575

76+
/**
77+
* Set the current global memstore on-heap size gauge
78+
* @param memStoreOnHeapSize the current memory on-heap size in memstore, in bytes.
79+
*/
80+
public void setCurMemStoreOnHeapSizeGauge(final long memStoreOnHeapSize) {
81+
source.setCurMemStoreOnHeapSizeGauge(memStoreOnHeapSize);
82+
}
83+
84+
/**
85+
* Set the current global memstore off-heap size gauge
86+
* @param memStoreOffHeapSize the current memory off-heap size in memstore, in bytes.
87+
*/
88+
public void setCurMemStoreOffHeapSizeGauge(final long memStoreOffHeapSize) {
89+
source.setCurMemStoreOffHeapSizeGauge(memStoreOffHeapSize);
90+
}
91+
7692
/**
7793
* Update the increase/decrease memstore size histogram
7894
* @param memStoreDeltaSize the tuning result of memstore.

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerAccounting.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,12 @@ public long getGlobalMemStoreDataSize() {
121121
return globalMemStoreDataSize.sum();
122122
}
123123

124-
/** Returns the global memstore heap size in the RegionServer */
124+
/** Returns the global memstore on-heap size in the RegionServer */
125125
public long getGlobalMemStoreHeapSize() {
126126
return this.globalMemStoreHeapSize.sum();
127127
}
128128

129-
/** Returns the global memstore heap size in the RegionServer */
129+
/** Returns the global memstore off-heap size in the RegionServer */
130130
public long getGlobalMemStoreOffHeapSize() {
131131
return this.globalMemStoreOffHeapSize.sum();
132132
}

hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsHeapMemoryManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,15 @@ public void testGauge() {
7474
hmm.updateBlockedFlushCount(200);
7575
hmm.updateUnblockedFlushCount(50);
7676
hmm.setCurMemStoreSizeGauge(256 * 1024 * 1024);
77+
hmm.setCurMemStoreOnHeapSizeGauge(512 * 1024 * 1024);
78+
hmm.setCurMemStoreOffHeapSizeGauge(128 * 1024 * 1024);
7779
hmm.setCurBlockCacheSizeGauge(100 * 1024 * 1024);
7880

7981
HELPER.assertGauge("blockedFlushGauge", 200, source);
8082
HELPER.assertGauge("unblockedFlushGauge", 50, source);
8183
HELPER.assertGauge("memStoreSize", 256 * 1024 * 1024, source);
84+
HELPER.assertGauge("memStoreOnHeapSize", 512 * 1024 * 1024, source);
85+
HELPER.assertGauge("memStoreOffHeapSize", 128 * 1024 * 1024, source);
8286
HELPER.assertGauge("blockCacheSize", 100 * 1024 * 1024, source);
8387
}
8488
}

0 commit comments

Comments
 (0)