Skip to content

Commit cdf81ea

Browse files
authored
HBASE-26975 Add on heap and off heap memstore info in rs web UI (#4368)
Signed-off-by: Duo Zhang <[email protected]>
1 parent c02e755 commit cdf81ea

File tree

6 files changed

+92
-6
lines changed

6 files changed

+92
-6
lines changed

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,16 @@ public interface MetricsRegionServerWrapper {
101101
*/
102102
long getMemStoreSize();
103103

104+
/**
105+
* Get the size of the on heap memstore on this region server.
106+
*/
107+
long getOnHeapMemStoreSize();
108+
109+
/**
110+
* Get the size of the off heap memstore on this region server.
111+
*/
112+
long getOffHeapMemStoreSize();
113+
104114
/**
105115
* Get the total size of the store files this region server is serving from.
106116
*/
@@ -236,7 +246,22 @@ public interface MetricsRegionServerWrapper {
236246
*/
237247
int getFlushQueueSize();
238248

249+
/**
250+
* Get the limit size of the off heap memstore (if enabled), otherwise
251+
* get the limit size of the on heap memstore.
252+
*/
239253
long getMemStoreLimit();
254+
255+
/**
256+
* Get the limit size of the on heap memstore.
257+
*/
258+
long getOnHeapMemStoreLimit();
259+
260+
/**
261+
* Get the limit size of the off heap memstore.
262+
*/
263+
long getOffHeapMemStoreLimit();
264+
240265
/**
241266
* Get the size (in bytes) of the block cache that is free.
242267
*/

hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.jamon

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,9 @@ MetricsRegionServerWrapper mWrap;
113113
<th>Max Heap</th>
114114
<th>Direct Memory Used</th>
115115
<th>Direct Memory Configured</th>
116-
<th>Memstore Size</th>
117-
<th>Memstore Limit</th>
116+
<th>Memstore On-Heap Size / Limit</th>
117+
<th>Memstore Off-Heap Size / Limit</th>
118+
<th>Memstore Data Size (On&&Off Heap)</th>
118119
</tr>
119120
</tr>
120121
<tr>
@@ -131,10 +132,15 @@ MetricsRegionServerWrapper mWrap;
131132
<% TraditionalBinaryPrefix.long2String(DirectMemoryUtils.getDirectMemorySize(), "B", 1) %>
132133
</td>
133134
<td>
134-
<% TraditionalBinaryPrefix.long2String(mWrap.getMemStoreSize(), "B", 1) %>
135+
<% TraditionalBinaryPrefix.long2String(mWrap.getOnHeapMemStoreSize(), "B", 1) + " / "
136+
+ TraditionalBinaryPrefix.long2String(mWrap.getOnHeapMemStoreLimit(), "B", 1) %>
137+
</td>
138+
<td>
139+
<% TraditionalBinaryPrefix.long2String(mWrap.getOffHeapMemStoreSize(), "B", 1) + " / "
140+
+ TraditionalBinaryPrefix.long2String(mWrap.getOffHeapMemStoreLimit(), "B", 1) %>
135141
</td>
136142
<td>
137-
<% TraditionalBinaryPrefix.long2String(mWrap.getMemStoreLimit(), "B", 1) %>
143+
<% TraditionalBinaryPrefix.long2String(mWrap.getMemStoreSize(), "B", 1) %>
138144
</td>
139145
</tr>
140146
</table>

hbase-server/src/main/java/org/apache/hadoop/hbase/io/util/MemorySizeUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import org.apache.hadoop.hbase.util.Pair;
3131

3232
/**
33-
* Util class to calculate memory size for memstore, block cache(L1, L2) of RS.
33+
* Util class to calculate memory size for memstore(on heap, off heap), block cache(L1, L2) of RS.
3434
*/
3535
@InterfaceAudience.Private
3636
public class MemorySizeUtil {

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

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ class MetricsRegionServerWrapperImpl
7777
private volatile long walFileSize = 0;
7878
private volatile long numStoreFiles = 0;
7979
private volatile long memstoreSize = 0;
80+
private volatile long onHeapMemstoreSize = 0;
81+
private volatile long offHeapMemstoreSize = 0;
8082
private volatile long storeFileSize = 0;
8183
private volatile double storeFileSizeGrowthRate = 0;
8284
private volatile long maxStoreFileAge = 0;
@@ -282,6 +284,16 @@ public long getMemStoreLimit() {
282284
return this.regionServer.getRegionServerAccounting().getGlobalMemStoreLimit();
283285
}
284286

287+
@Override
288+
public long getOnHeapMemStoreLimit() {
289+
return this.regionServer.getRegionServerAccounting().getGlobalOnHeapMemStoreLimit();
290+
}
291+
292+
@Override
293+
public long getOffHeapMemStoreLimit() {
294+
return this.regionServer.getRegionServerAccounting().getGlobalOffHeapMemStoreLimit();
295+
}
296+
285297
@Override
286298
public long getBlockCacheSize() {
287299
return this.blockCache != null ? this.blockCache.getCurrentSize() : 0L;
@@ -450,6 +462,16 @@ public long getMemStoreSize() {
450462
return memstoreSize;
451463
}
452464

465+
@Override
466+
public long getOnHeapMemStoreSize() {
467+
return onHeapMemstoreSize;
468+
}
469+
470+
@Override
471+
public long getOffHeapMemStoreSize() {
472+
return offHeapMemstoreSize;
473+
}
474+
453475
@Override
454476
public long getStoreFileSize() {
455477
return storeFileSize;
@@ -695,7 +717,8 @@ synchronized public void run() {
695717
HDFSBlocksDistribution hdfsBlocksDistributionSecondaryRegions =
696718
new HDFSBlocksDistribution();
697719

698-
long tempNumStores = 0, tempNumStoreFiles = 0, tempMemstoreSize = 0, tempStoreFileSize = 0;
720+
long tempNumStores = 0, tempNumStoreFiles = 0, tempStoreFileSize = 0;
721+
long tempMemstoreSize = 0, tempOnHeapMemstoreSize = 0, tempOffHeapMemstoreSize = 0;
699722
long tempMaxStoreFileAge = 0, tempNumReferenceFiles = 0;
700723
long avgAgeNumerator = 0, numHFiles = 0;
701724
long tempMinStoreFileAge = Long.MAX_VALUE;
@@ -776,6 +799,8 @@ synchronized public void run() {
776799
for (Store store : storeList) {
777800
tempNumStoreFiles += store.getStorefilesCount();
778801
tempMemstoreSize += store.getMemStoreSize().getDataSize();
802+
tempOnHeapMemstoreSize += store.getMemStoreSize().getHeapSize();
803+
tempOffHeapMemstoreSize += store.getMemStoreSize().getOffHeapSize();
779804
tempStoreFileSize += store.getStorefilesSize();
780805

781806
OptionalLong storeMaxStoreFileAge = store.getMaxStoreFileAge();
@@ -877,6 +902,8 @@ synchronized public void run() {
877902
numStores = tempNumStores;
878903
numStoreFiles = tempNumStoreFiles;
879904
memstoreSize = tempMemstoreSize;
905+
onHeapMemstoreSize = tempOnHeapMemstoreSize;
906+
offHeapMemstoreSize = tempOffHeapMemstoreSize;
880907
storeFileSize = tempStoreFileSize;
881908
maxStoreFileAge = tempMaxStoreFileAge;
882909
if (regionCount > 0) {

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,14 @@ long getGlobalMemStoreLimit() {
8181
return this.globalMemStoreLimit;
8282
}
8383

84+
long getGlobalOffHeapMemStoreLimit() {
85+
if (isOffheap()) {
86+
return this.globalMemStoreLimit;
87+
} else {
88+
return 0;
89+
}
90+
}
91+
8492
long getGlobalOnHeapMemStoreLimit() {
8593
return this.globalOnHeapMemstoreLimit;
8694
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,16 @@ public long getMemStoreSize() {
6868
return 1025;
6969
}
7070

71+
@Override
72+
public long getOnHeapMemStoreSize() {
73+
return 500;
74+
}
75+
76+
@Override
77+
public long getOffHeapMemStoreSize() {
78+
return 600;
79+
}
80+
7181
@Override
7282
public long getStoreFileSize() {
7383
return 1900;
@@ -263,6 +273,16 @@ public long getMemStoreLimit() {
263273
return 419;
264274
}
265275

276+
@Override
277+
public long getOnHeapMemStoreLimit() {
278+
return 311;
279+
}
280+
281+
@Override
282+
public long getOffHeapMemStoreLimit() {
283+
return 419;
284+
}
285+
266286
@Override
267287
public long getBlockCacheFreeSize() {
268288
return 413;

0 commit comments

Comments
 (0)