Procházet zdrojové kódy

HADOOP-11098. [JDK8] Max Non Heap Memory default changed between JDK7 and 8.

(cherry picked from commit 30e2f836a26490a24c7ddea754dd19f95b24bbc8)
Tsuyoshi Ozawa před 9 roky
rodič
revize
e6514c6a3b

+ 3 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -608,6 +608,9 @@ Release 2.8.0 - UNRELEASED
     HADOOP-8437. getLocalPathForWrite should throw IOException for invalid
     paths. (Brahma Reddy Battula via zxu)
 
+    HADOOP-11098. [JDK8] Max Non Heap Memory default changed between JDK7
+    and 8. (ozawa)
+
   OPTIMIZATIONS
 
     HADOOP-12051. ProtobufRpcEngine.invoke() should use Exception.toString()

+ 13 - 2
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetrics.java

@@ -60,6 +60,7 @@ public class JvmMetrics implements MetricsSource {
   }
 
   static final float M = 1024*1024;
+  static public final float MEMORY_MAX_UNLIMITED_MB = -1;
 
   final MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
   final List<GarbageCollectorMXBean> gcBeans =
@@ -106,13 +107,23 @@ public class JvmMetrics implements MetricsSource {
     Runtime runtime = Runtime.getRuntime();
     rb.addGauge(MemNonHeapUsedM, memNonHeap.getUsed() / M)
       .addGauge(MemNonHeapCommittedM, memNonHeap.getCommitted() / M)
-      .addGauge(MemNonHeapMaxM, memNonHeap.getMax() / M)
+      .addGauge(MemNonHeapMaxM, calculateMaxMemoryUsage(memNonHeap))
       .addGauge(MemHeapUsedM, memHeap.getUsed() / M)
       .addGauge(MemHeapCommittedM, memHeap.getCommitted() / M)
-      .addGauge(MemHeapMaxM, memHeap.getMax() / M)
+      .addGauge(MemHeapMaxM, calculateMaxMemoryUsage(memHeap))
       .addGauge(MemMaxM, runtime.maxMemory() / M);
   }
 
+  private float calculateMaxMemoryUsage(MemoryUsage memHeap) {
+    long max =  memHeap.getMax() ;
+
+     if (max == -1) {
+       return MEMORY_MAX_UNLIMITED_MB;
+     }
+
+    return max / M;
+  }
+
   private void getGcUsage(MetricsRecordBuilder rb) {
     long count = 0;
     long timeMillis = 0;

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -1142,6 +1142,9 @@ Release 2.8.0 - UNRELEASED
     HDFS-9193. Fix incorrect references the usages of the DN in dfshealth.js.
     (Chang Li via wheat9)
 
+    HADOOP-11098. [JDK8] Max Non Heap Memory default changed between JDK7
+    and 8 (ozawa).
+
 Release 2.7.2 - UNRELEASED
 
   INCOMPATIBLE CHANGES

+ 2 - 2
hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.html

@@ -150,11 +150,11 @@
   {/fs}
 </p>
 {#mem.HeapMemoryUsage}
-<p>Heap Memory used {used|fmt_bytes} of {committed|fmt_bytes} Heap Memory. Max Heap Memory is {max|fmt_bytes}. </p>
+<p>Heap Memory used {used|fmt_bytes} of {committed|fmt_bytes} Heap Memory. Max Heap Memory is {@eq key=max value="-1" type="number"}&ltunbonded&gt{:else}{max|fmt_bytes}{/eq}.</p>
 {/mem.HeapMemoryUsage}
 
 {#mem.NonHeapMemoryUsage}
-<p>Non Heap Memory used {used|fmt_bytes} of {committed|fmt_bytes} Commited Non Heap Memory. Max Non Heap Memory is {max|fmt_bytes}. </p>
+<p>Non Heap Memory used {used|fmt_bytes} of {committed|fmt_bytes} Commited Non Heap Memory. Max Non Heap Memory is {@eq key=max value="-1" type="number"}&ltunbonded&gt{:else}{max|fmt_bytes}{/eq}.</p>
 {/mem.NonHeapMemoryUsage}
 
 {#nn}