Skip to content

Commit 27c3584

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

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
*/
@@ -226,7 +236,22 @@ public interface MetricsRegionServerWrapper {
226236
*/
227237
int getFlushQueueSize();
228238

239+
/**
240+
* Get the limit size of the off heap memstore (if enabled), otherwise
241+
* get the limit size of the on heap memstore.
242+
*/
229243
long getMemStoreLimit();
244+
245+
/**
246+
* Get the limit size of the on heap memstore.
247+
*/
248+
long getOnHeapMemStoreLimit();
249+
250+
/**
251+
* Get the limit size of the off heap memstore.
252+
*/
253+
long getOffHeapMemStoreLimit();
254+
230255
/**
231256
* Get the size (in bytes) of the block cache that is free.
232257
*/

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
@@ -117,8 +117,9 @@ MetricsRegionServerWrapper mWrap;
117117
<th>Max Heap</th>
118118
<th>Direct Memory Used</th>
119119
<th>Direct Memory Configured</th>
120-
<th>Memstore Size</th>
121-
<th>Memstore Limit</th>
120+
<th>Memstore On-Heap Size / Limit</th>
121+
<th>Memstore Off-Heap Size / Limit</th>
122+
<th>Memstore Data Size (On&&Off Heap)</th>
122123
</tr>
123124
</tr>
124125
<tr>
@@ -135,10 +136,15 @@ MetricsRegionServerWrapper mWrap;
135136
<% TraditionalBinaryPrefix.long2String(DirectMemoryUtils.getDirectMemorySize(), "B", 1) %>
136137
</td>
137138
<td>
138-
<% TraditionalBinaryPrefix.long2String(mWrap.getMemStoreSize(), "B", 1) %>
139+
<% TraditionalBinaryPrefix.long2String(mWrap.getOnHeapMemStoreSize(), "B", 1) + " / "
140+
+ TraditionalBinaryPrefix.long2String(mWrap.getOnHeapMemStoreLimit(), "B", 1) %>
141+
</td>
142+
<td>
143+
<% TraditionalBinaryPrefix.long2String(mWrap.getOffHeapMemStoreSize(), "B", 1) + " / "
144+
+ TraditionalBinaryPrefix.long2String(mWrap.getOffHeapMemStoreLimit(), "B", 1) %>
139145
</td>
140146
<td>
141-
<% TraditionalBinaryPrefix.long2String(mWrap.getMemStoreLimit(), "B", 1) %>
147+
<% TraditionalBinaryPrefix.long2String(mWrap.getMemStoreSize(), "B", 1) %>
142148
</td>
143149
</tr>
144150
</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
@@ -78,6 +78,8 @@ class MetricsRegionServerWrapperImpl
7878
private volatile long walFileSize = 0;
7979
private volatile long numStoreFiles = 0;
8080
private volatile long memstoreSize = 0;
81+
private volatile long onHeapMemstoreSize = 0;
82+
private volatile long offHeapMemstoreSize = 0;
8183
private volatile long storeFileSize = 0;
8284
private volatile long maxStoreFileAge = 0;
8385
private volatile long minStoreFileAge = 0;
@@ -281,6 +283,16 @@ public long getMemStoreLimit() {
281283
return this.regionServer.getRegionServerAccounting().getGlobalMemStoreLimit();
282284
}
283285

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

464+
@Override
465+
public long getOnHeapMemStoreSize() {
466+
return onHeapMemstoreSize;
467+
}
468+
469+
@Override
470+
public long getOffHeapMemStoreSize() {
471+
return offHeapMemstoreSize;
472+
}
473+
452474
@Override
453475
public long getStoreFileSize() {
454476
return storeFileSize;
@@ -683,7 +705,8 @@ synchronized public void run() {
683705
HDFSBlocksDistribution hdfsBlocksDistributionSecondaryRegions =
684706
new HDFSBlocksDistribution();
685707

686-
long tempNumStores = 0, tempNumStoreFiles = 0, tempMemstoreSize = 0, tempStoreFileSize = 0;
708+
long tempNumStores = 0, tempNumStoreFiles = 0, tempStoreFileSize = 0;
709+
long tempMemstoreSize = 0, tempOnHeapMemstoreSize = 0, tempOffHeapMemstoreSize = 0;
687710
long tempMaxStoreFileAge = 0, tempNumReferenceFiles = 0;
688711
long avgAgeNumerator = 0, numHFiles = 0;
689712
long tempMinStoreFileAge = Long.MAX_VALUE;
@@ -762,6 +785,8 @@ synchronized public void run() {
762785
for (Store store : storeList) {
763786
tempNumStoreFiles += store.getStorefilesCount();
764787
tempMemstoreSize += store.getMemStoreSize().getDataSize();
788+
tempOnHeapMemstoreSize += store.getMemStoreSize().getHeapSize();
789+
tempOffHeapMemstoreSize += store.getMemStoreSize().getOffHeapSize();
765790
tempStoreFileSize += store.getStorefilesSize();
766791

767792
OptionalLong storeMaxStoreFileAge = store.getMaxStoreFileAge();
@@ -856,6 +881,8 @@ synchronized public void run() {
856881
numStores = tempNumStores;
857882
numStoreFiles = tempNumStoreFiles;
858883
memstoreSize = tempMemstoreSize;
884+
onHeapMemstoreSize = tempOnHeapMemstoreSize;
885+
offHeapMemstoreSize = tempOffHeapMemstoreSize;
859886
storeFileSize = tempStoreFileSize;
860887
maxStoreFileAge = tempMaxStoreFileAge;
861888
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;
@@ -253,6 +263,16 @@ public long getMemStoreLimit() {
253263
return 419;
254264
}
255265

266+
@Override
267+
public long getOnHeapMemStoreLimit() {
268+
return 311;
269+
}
270+
271+
@Override
272+
public long getOffHeapMemStoreLimit() {
273+
return 419;
274+
}
275+
256276
@Override
257277
public long getBlockCacheFreeSize() {
258278
return 413;

0 commit comments

Comments
 (0)