Repository: giraph Updated Branches: refs/heads/trunk 400b7706a -> 2a7ea8b83
GIRAPH-896: Fix memory leak in SuperstepMetricsRegistry (edunov via pavanka) Project: http://git-wip-us.apache.org/repos/asf/giraph/repo Commit: http://git-wip-us.apache.org/repos/asf/giraph/commit/2a7ea8b8 Tree: http://git-wip-us.apache.org/repos/asf/giraph/tree/2a7ea8b8 Diff: http://git-wip-us.apache.org/repos/asf/giraph/diff/2a7ea8b8 Branch: refs/heads/trunk Commit: 2a7ea8b8389c103b03df961f8d6a9b5571caa991 Parents: 400b770 Author: Pavan Kumar <[email protected]> Authored: Tue May 13 15:07:29 2014 -0700 Committer: Pavan Kumar <[email protected]> Committed: Tue May 13 15:07:51 2014 -0700 ---------------------------------------------------------------------- CHANGELOG | 2 + .../NettyWorkerClientRequestProcessor.java | 50 +++++++++++++------- 2 files changed, 35 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/giraph/blob/2a7ea8b8/CHANGELOG ---------------------------------------------------------------------- diff --git a/CHANGELOG b/CHANGELOG index b51ccf6..3f0d819 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ Giraph Change Log Release 1.1.0 - unreleased + GIRAPH-896: Fix memory leak in SuperstepMetricsRegistry (edunov via pavanka) + GIRAPH-897: Add an option to dump only live objects to JMap (edunov via pavanka) GIRAPH-895: Trim the edges in Giraph (edunov via pavanka) http://git-wip-us.apache.org/repos/asf/giraph/blob/2a7ea8b8/giraph-core/src/main/java/org/apache/giraph/comm/netty/NettyWorkerClientRequestProcessor.java ---------------------------------------------------------------------- diff --git a/giraph-core/src/main/java/org/apache/giraph/comm/netty/NettyWorkerClientRequestProcessor.java b/giraph-core/src/main/java/org/apache/giraph/comm/netty/NettyWorkerClientRequestProcessor.java index 0166713..43c01ce 100644 --- a/giraph-core/src/main/java/org/apache/giraph/comm/netty/NettyWorkerClientRequestProcessor.java +++ b/giraph-core/src/main/java/org/apache/giraph/comm/netty/NettyWorkerClientRequestProcessor.java @@ -155,23 +155,7 @@ public class NettyWorkerClientRequestProcessor<I extends WritableComparable, SuperstepMetricsRegistry smr = GiraphMetrics.get().perSuperstep(); localRequests = smr.getCounter(MetricNames.LOCAL_REQUESTS); remoteRequests = smr.getCounter(MetricNames.REMOTE_REQUESTS); - final Gauge<Long> totalRequests = smr.getGauge(MetricNames.TOTAL_REQUESTS, - new Gauge<Long>() { - @Override - public Long value() { - return localRequests.count() + remoteRequests.count(); - } - } - ); - smr.getGauge(MetricNames.PERCENT_LOCAL_REQUESTS, new PercentGauge() { - @Override protected double getNumerator() { - return localRequests.count(); - } - - @Override protected double getDenominator() { - return totalRequests.value(); - } - }); + setupGauges(smr, localRequests, remoteRequests); } @Override @@ -487,4 +471,36 @@ public class NettyWorkerClientRequestProcessor<I extends WritableComparable, remoteRequests.inc(); } } + + /** + * Sets up gauges for superstep metrics. + * This has to be static so that internal objects created here don't + * hold references to this$0. Otherwise we memory leaking + * NettyWorkerClientRequestProcessor objects. + * + * @param smr metric registry for current superstep + * @param localRequests counter for local requests + * @param remoteRequests counter for remote requests + */ + private static void setupGauges(SuperstepMetricsRegistry smr, + final Counter localRequests, + final Counter remoteRequests) { + final Gauge<Long> totalRequests = smr.getGauge(MetricNames.TOTAL_REQUESTS, + new Gauge<Long>() { + @Override + public Long value() { + return localRequests.count() + remoteRequests.count(); + } + } + ); + smr.getGauge(MetricNames.PERCENT_LOCAL_REQUESTS, new PercentGauge() { + @Override protected double getNumerator() { + return localRequests.count(); + } + + @Override protected double getDenominator() { + return totalRequests.value(); + } + }); + } }
