소스 검색

YARN-4031. Add JvmPauseMonitor to ApplicationHistoryServer and WebAppProxyServer (djp via rkanter)

(cherry picked from commit dc2340c60e33f903f8fd34958ec746c989016191)
Robert Kanter 9 년 전
부모
커밋
fbcfca6f91

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

@@ -344,6 +344,9 @@ Release 2.8.0 - UNRELEASED
     YARN-4026. Refactored ContainerAllocator to accept a list of priorites
     rather than a single priority. (Wangda Tan via jianhe)
 
+   YARN-4031. Add JvmPauseMonitor to ApplicationHistoryServer and
+   WebAppProxyServer (djp via rkanter)
+
   OPTIMIZATIONS
 
     YARN-3339. TestDockerContainerExecutor should pull a single image and not

+ 12 - 2
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryServer.java

@@ -34,6 +34,7 @@ import org.apache.hadoop.service.CompositeService;
 import org.apache.hadoop.service.Service;
 import org.apache.hadoop.util.ExitUtil;
 import org.apache.hadoop.util.GenericOptionsParser;
+import org.apache.hadoop.util.JvmPauseMonitor;
 import org.apache.hadoop.util.ReflectionUtils;
 import org.apache.hadoop.util.ShutdownHookManager;
 import org.apache.hadoop.util.StringUtils;
@@ -73,6 +74,7 @@ public class ApplicationHistoryServer extends CompositeService {
   private TimelineDelegationTokenSecretManagerService secretManagerService;
   private TimelineDataManager timelineDataManager;
   private WebApp webApp;
+  private JvmPauseMonitor pauseMonitor;
 
   public ApplicationHistoryServer() {
     super(ApplicationHistoryServer.class.getName());
@@ -96,7 +98,9 @@ public class ApplicationHistoryServer extends CompositeService {
     addService((Service) historyManager);
 
     DefaultMetricsSystem.initialize("ApplicationHistoryServer");
-    JvmMetrics.initSingleton("ApplicationHistoryServer", null);
+    JvmMetrics jm = JvmMetrics.initSingleton("ApplicationHistoryServer", null);
+    pauseMonitor = new JvmPauseMonitor(conf);
+    jm.setPauseMonitor(pauseMonitor);
     super.serviceInit(conf);
   }
 
@@ -107,6 +111,10 @@ public class ApplicationHistoryServer extends CompositeService {
     } catch(IOException ie) {
       throw new YarnRuntimeException("Failed to login", ie);
     }
+
+    if (pauseMonitor != null) {
+      pauseMonitor.start();
+    }
     super.serviceStart();
     startWebApp();
   }
@@ -116,7 +124,9 @@ public class ApplicationHistoryServer extends CompositeService {
     if (webApp != null) {
       webApp.stop();
     }
-
+    if (pauseMonitor != null) {
+      pauseMonitor.stop();
+    }
     DefaultMetricsSystem.shutdown();
     super.serviceStop();
   }

+ 30 - 2
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServer.java

@@ -22,10 +22,13 @@ import java.io.IOException;
 import java.net.InetSocketAddress;
 
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
+import org.apache.hadoop.metrics2.source.JvmMetrics;
 import org.apache.hadoop.security.SecurityUtil;
 import org.apache.hadoop.service.CompositeService;
 import org.apache.hadoop.util.ExitUtil;
 import org.apache.hadoop.util.GenericOptionsParser;
+import org.apache.hadoop.util.JvmPauseMonitor;
 import org.apache.hadoop.util.ShutdownHookManager;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.hadoop.yarn.YarnUncaughtExceptionHandler;
@@ -48,7 +51,9 @@ public class WebAppProxyServer extends CompositeService {
       WebAppProxyServer.class);
 
   private WebAppProxy proxy = null;
-  
+
+  private JvmPauseMonitor pauseMonitor;
+
   public WebAppProxyServer() {
     super(WebAppProxyServer.class.getName());
   }
@@ -56,12 +61,35 @@ public class WebAppProxyServer extends CompositeService {
   @Override
   protected void serviceInit(Configuration conf) throws Exception {
     Configuration config = new YarnConfiguration(conf);
-    doSecureLogin(conf);      
+    doSecureLogin(conf);
     proxy = new WebAppProxy();
     addService(proxy);
+
+    DefaultMetricsSystem.initialize("WebAppProxyServer");
+    JvmMetrics jm = JvmMetrics.initSingleton("WebAppProxyServer", null);
+    pauseMonitor = new JvmPauseMonitor(conf);
+    jm.setPauseMonitor(pauseMonitor);
+
     super.serviceInit(config);
   }
 
+  @Override
+  protected void serviceStart() throws Exception {
+    if (pauseMonitor != null) {
+      pauseMonitor.start();
+    }
+    super.serviceStart();
+  }
+
+  @Override
+  protected void serviceStop() throws Exception {
+    super.serviceStop();
+    DefaultMetricsSystem.shutdown();
+    if (pauseMonitor != null) {
+      pauseMonitor.stop();
+    }
+  }
+
   /**
    * Log in as the Kerberose principal designated for the proxy
    * @param conf the configuration holding this information in it.