You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2022/11/23 12:09:53 UTC

[hbase] branch master updated: HBASE-27445 fix the result of DirectMemoryUtils#getDirectMemorySize (#4846)

This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new 2f4758ee592 HBASE-27445 fix the result of DirectMemoryUtils#getDirectMemorySize (#4846)
2f4758ee592 is described below

commit 2f4758ee592959ee5ddd646a6769bb81a781d610
Author: Ruanhui <32...@users.noreply.github.com>
AuthorDate: Wed Nov 23 20:09:41 2022 +0800

    HBASE-27445 fix the result of DirectMemoryUtils#getDirectMemorySize (#4846)
    
    Co-authored-by: huiruan <hu...@tencent.com>
    Signed-off-by: Duo Zhang <zh...@apache.org>
---
 .../hadoop/hbase/util/DirectMemoryUtils.java       | 36 +++-------------------
 1 file changed, 4 insertions(+), 32 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/DirectMemoryUtils.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/DirectMemoryUtils.java
index c0a9685d13e..082796b4a15 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/DirectMemoryUtils.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/DirectMemoryUtils.java
@@ -18,12 +18,9 @@
 package org.apache.hadoop.hbase.util;
 
 import java.lang.management.ManagementFactory;
-import java.lang.management.RuntimeMXBean;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.nio.ByteBuffer;
-import java.util.List;
-import java.util.Locale;
 import javax.management.JMException;
 import javax.management.MBeanServer;
 import javax.management.MalformedObjectNameException;
@@ -37,6 +34,7 @@ import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;
 import org.apache.hbase.thirdparty.io.netty.buffer.ByteBufAllocatorMetric;
 import org.apache.hbase.thirdparty.io.netty.buffer.ByteBufAllocatorMetricProvider;
 import org.apache.hbase.thirdparty.io.netty.buffer.PooledByteBufAllocator;
+import org.apache.hbase.thirdparty.io.netty.util.internal.PlatformDependent;
 
 /**
  * Utilities for interacting with and monitoring DirectByteBuffer allocations.
@@ -49,6 +47,7 @@ public class DirectMemoryUtils {
   private static final MBeanServer BEAN_SERVER;
   private static final ObjectName NIO_DIRECT_POOL;
   private static final boolean HAS_MEMORY_USED_ATTRIBUTE;
+  private static final long MAX_DIRECT_MEMORY = PlatformDependent.estimateMaxDirectMemory();
 
   static {
     // initialize singletons. Only maintain a reference to the MBeanServer if
@@ -77,36 +76,9 @@ public class DirectMemoryUtils {
     HAS_MEMORY_USED_ATTRIBUTE = a != null;
   }
 
-  /**
-   * @return the setting of -XX:MaxDirectMemorySize as a long. Returns 0 if -XX:MaxDirectMemorySize
-   *         is not set.
-   */
+  /** Returns the direct memory limit of the current progress */
   public static long getDirectMemorySize() {
-    RuntimeMXBean runtimemxBean = ManagementFactory.getRuntimeMXBean();
-    List<String> arguments = runtimemxBean.getInputArguments();
-    long multiplier = 1; // for the byte case.
-    for (String s : arguments) {
-      if (s.contains("-XX:MaxDirectMemorySize=")) {
-        String memSize = s.toLowerCase(Locale.ROOT).replace("-xx:maxdirectmemorysize=", "").trim();
-
-        if (memSize.contains("k")) {
-          multiplier = 1024;
-        }
-
-        else if (memSize.contains("m")) {
-          multiplier = 1048576;
-        }
-
-        else if (memSize.contains("g")) {
-          multiplier = 1073741824;
-        }
-        memSize = memSize.replaceAll("[^\\d]", "");
-
-        long retValue = Long.parseLong(memSize);
-        return retValue * multiplier;
-      }
-    }
-    return 0;
+    return MAX_DIRECT_MEMORY;
   }
 
   /** Returns the current amount of direct memory used. */