You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2016/11/30 13:25:40 UTC

[2/2] lucene-solr:feature/metrics: SOLR-9805: Use metrics-jvm library to instrument jvm internals such as GC, memory usage and others

SOLR-9805: Use metrics-jvm library to instrument jvm internals such as GC, memory usage and others


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/8601477a
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/8601477a
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/8601477a

Branch: refs/heads/feature/metrics
Commit: 8601477a65ba9141a39389341230b273a69fcecc
Parents: 1e1ae1f
Author: Shalin Shekhar Mangar <sh...@apache.org>
Authored: Wed Nov 30 18:55:25 2016 +0530
Committer: Shalin Shekhar Mangar <sh...@apache.org>
Committed: Wed Nov 30 18:55:25 2016 +0530

----------------------------------------------------------------------
 lucene/ivy-versions.properties                  |  1 +
 solr/CHANGES.txt                                |  2 ++
 .../apache/solr/servlet/SolrDispatchFilter.java | 22 ++++++++++++++++++++
 solr/server/ivy.xml                             |  1 +
 4 files changed, 26 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/8601477a/lucene/ivy-versions.properties
----------------------------------------------------------------------
diff --git a/lucene/ivy-versions.properties b/lucene/ivy-versions.properties
index 1f3953d..387c12e 100644
--- a/lucene/ivy-versions.properties
+++ b/lucene/ivy-versions.properties
@@ -79,6 +79,7 @@ io.dropwizard.metrics.version = 3.1.2
 /io.dropwizard.metrics/metrics-jetty9 = ${io.dropwizard.metrics.version}
 /io.dropwizard.metrics/metrics-json = ${io.dropwizard.metrics.version}
 /io.dropwizard.metrics/metrics-servlets = ${io.dropwizard.metrics.version}
+/io.dropwizard.metrics/metrics-jvm = ${io.dropwizard.metrics.version}
 
 io.netty.netty-all.version = 4.0.36.Final
 /io.netty/netty-all = ${io.netty.netty-all.version}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/8601477a/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 7ab926d..1279805 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -155,6 +155,8 @@ New Features
 * SOLR-9788: Use instrumented jetty classes provided by the dropwizard metric library. This also introduces a
   new /admin/metrics API endpoint to return all registered metrics in JSON format. (shalin)
 
+* SOLR-9805: Use metrics-jvm library to instrument jvm internals such as GC, memory usage and others. (shalin)
+
 Optimizations
 ----------------------
 * SOLR-9704: Facet Module / JSON Facet API: Optimize blockChildren facets that have

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/8601477a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java b/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
index 5a4cfb6..7c5ce2b 100644
--- a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
+++ b/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
@@ -16,6 +16,7 @@
  */
 package org.apache.solr.servlet;
 
+import javax.management.MBeanServer;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletException;
@@ -33,6 +34,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.lang.invoke.MethodHandles;
+import java.lang.management.ManagementFactory;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.Instant;
@@ -45,6 +47,14 @@ import java.util.concurrent.atomic.AtomicReference;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.SharedMetricRegistries;
+import com.codahale.metrics.jvm.BufferPoolMetricSet;
+import com.codahale.metrics.jvm.ClassLoadingGaugeSet;
+import com.codahale.metrics.jvm.FileDescriptorRatioGauge;
+import com.codahale.metrics.jvm.GarbageCollectorMetricSet;
+import com.codahale.metrics.jvm.MemoryUsageGaugeSet;
+import com.codahale.metrics.jvm.ThreadStatesGaugeSet;
 import org.apache.commons.io.input.CloseShieldInputStream;
 import org.apache.commons.io.output.CloseShieldOutputStream;
 import org.apache.commons.lang.StringUtils;
@@ -142,6 +152,7 @@ public class SolrDispatchFilter extends BaseSolrFilter {
         excludePatterns.add(Pattern.compile(element));
       }
     }
+    setupJvmMetrics();
     try {
       Properties extraProperties = (Properties) config.getServletContext().getAttribute(PROPERTIES_ATTRIBUTE);
       if (extraProperties == null)
@@ -167,6 +178,17 @@ public class SolrDispatchFilter extends BaseSolrFilter {
     log.trace("SolrDispatchFilter.init() done");
   }
 
+  private void setupJvmMetrics()  {
+    MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
+    MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate("solr.jvm");
+    metricRegistry.registerAll(new BufferPoolMetricSet(platformMBeanServer));
+    metricRegistry.registerAll(new ClassLoadingGaugeSet());
+    metricRegistry.register("fileDescriptorRatio", new FileDescriptorRatioGauge());
+    metricRegistry.registerAll(new GarbageCollectorMetricSet());
+    metricRegistry.registerAll(new MemoryUsageGaugeSet());
+    metricRegistry.registerAll(new ThreadStatesGaugeSet()); // todo should we use CachedThreadStatesGaugeSet instead?
+  }
+
   private void logWelcomeBanner() {
     log.info(" ___      _       Welcome to Apache Solr\u2122 version {}", solrVersion());
     log.info("/ __| ___| |_ _   Starting in {} mode on port {}", isCloudMode() ? "cloud" : "standalone", getSolrPort());

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/8601477a/solr/server/ivy.xml
----------------------------------------------------------------------
diff --git a/solr/server/ivy.xml b/solr/server/ivy.xml
index ae8550a..2f3c39c 100644
--- a/solr/server/ivy.xml
+++ b/solr/server/ivy.xml
@@ -37,6 +37,7 @@
     <dependency org="io.dropwizard.metrics" name="metrics-servlets" rev="${/io.dropwizard.metrics/metrics-servlets}" conf="metrics" />
     <dependency org="io.dropwizard.metrics" name="metrics-json" rev="${/io.dropwizard.metrics/metrics-json}" conf="metrics" />
     <dependency org="io.dropwizard.metrics" name="metrics-jetty9" rev="${/io.dropwizard.metrics/metrics-jetty9}" conf="metrics" />
+    <dependency org="io.dropwizard.metrics" name="metrics-jvm" rev="${/io.dropwizard.metrics/metrics-jvm}" conf="metrics" />
     <dependency org="com.fasterxml.jackson.core" name="jackson-core" rev="${/com.fasterxml.jackson.core/jackson-core}" conf="metrics"/>
     <dependency org="com.fasterxml.jackson.core" name="jackson-databind" rev="${/com.fasterxml.jackson.core/jackson-databind}" conf="metrics"/>
     <dependency org="com.fasterxml.jackson.core" name="jackson-annotations" rev="${/com.fasterxml.jackson.core/jackson-annotations}" conf="metrics"/>