You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@giraph.apache.org by pa...@apache.org on 2014/05/14 00:04:36 UTC
git commit: updated refs/heads/trunk to 400b770
Repository: giraph
Updated Branches:
refs/heads/trunk 61cd43b19 -> 400b7706a
GIRAPH-897: Add an option to dump only live objects to JMap (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/400b7706
Tree: http://git-wip-us.apache.org/repos/asf/giraph/tree/400b7706
Diff: http://git-wip-us.apache.org/repos/asf/giraph/diff/400b7706
Branch: refs/heads/trunk
Commit: 400b7706ab28f138923e6db5b31fda28f1458917
Parents: 61cd43b
Author: Pavan Kumar <pa...@fb.com>
Authored: Tue May 13 15:00:13 2014 -0700
Committer: Pavan Kumar <pa...@fb.com>
Committed: Tue May 13 15:00:45 2014 -0700
----------------------------------------------------------------------
CHANGELOG | 4 ++-
.../org/apache/giraph/conf/GiraphConstants.java | 9 ++++++
.../main/java/org/apache/giraph/utils/JMap.java | 33 ++++++++++++++++++--
.../apache/giraph/utils/JMapHistoDumper.java | 5 ++-
4 files changed, 47 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/giraph/blob/400b7706/CHANGELOG
----------------------------------------------------------------------
diff --git a/CHANGELOG b/CHANGELOG
index efc76b6..b51ccf6 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,7 +1,9 @@
Giraph Change Log
Release 1.1.0 - unreleased
- GIRAPH-895 : Trim the edges in Giraph (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)
GIRAPH-889: Update Yourkit Profiler (yhdong via pavanka)
http://git-wip-us.apache.org/repos/asf/giraph/blob/400b7706/giraph-core/src/main/java/org/apache/giraph/conf/GiraphConstants.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/main/java/org/apache/giraph/conf/GiraphConstants.java b/giraph-core/src/main/java/org/apache/giraph/conf/GiraphConstants.java
index e791d62..7f1317f 100644
--- a/giraph-core/src/main/java/org/apache/giraph/conf/GiraphConstants.java
+++ b/giraph-core/src/main/java/org/apache/giraph/conf/GiraphConstants.java
@@ -393,6 +393,15 @@ public interface GiraphConstants {
"Configuration key for how many lines to print");
/**
+ * Configuration key for printing live objects only
+ * This option will trigger Full GC for every jmap dump
+ * and so can significantly hinder performance.
+ */
+ BooleanConfOption JMAP_LIVE_ONLY =
+ new BooleanConfOption("giraph.jmap.histo.live", false,
+ "Only print live objects in jmap?");
+
+ /**
* Minimum percent of the maximum number of workers that have responded
* in order to continue progressing. (float)
*/
http://git-wip-us.apache.org/repos/asf/giraph/blob/400b7706/giraph-core/src/main/java/org/apache/giraph/utils/JMap.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/main/java/org/apache/giraph/utils/JMap.java b/giraph-core/src/main/java/org/apache/giraph/utils/JMap.java
index 19c8efd..92dd9e2 100644
--- a/giraph-core/src/main/java/org/apache/giraph/utils/JMap.java
+++ b/giraph-core/src/main/java/org/apache/giraph/utils/JMap.java
@@ -34,6 +34,8 @@ public class JMap {
public static final String CMD = "jmap ";
/** Arguments to pass in to command */
public static final String ARGS = " -histo ";
+ /** This option will print out onlu live objects */
+ private static String LIVE_HISTO_OPTION = " -histo:live ";
/** Do not construct */
protected JMap() { }
@@ -55,6 +57,17 @@ public class JMap {
* Run jmap, print numLines of output from it to stderr.
*
* @param numLines Number of lines to print
+ * @param liveObjectsOnly Should we only print non GC-able objects?
+ */
+ public static void heapHistogramDump(int numLines,
+ boolean liveObjectsOnly) {
+ heapHistogramDump(numLines, liveObjectsOnly, System.err);
+ }
+
+ /**
+ * Run jmap, print numLines of output from it to stderr.
+ *
+ * @param numLines Number of lines to print
*/
public static void heapHistogramDump(int numLines) {
heapHistogramDump(numLines, System.err);
@@ -67,11 +80,27 @@ public class JMap {
* @param printStream Stream to print to
*/
public static void heapHistogramDump(int numLines, PrintStream printStream) {
+ heapHistogramDump(numLines, false, printStream);
+ }
+
+ /**
+ * Run jmap, print numLines of output from it to stream passed in.
+ *
+ * @param numLines Number of lines to print
+ * @param liveObjectsOnly Should we only print non GC-able objects?
+ * @param printStream Stream to print to
+ */
+ private static void heapHistogramDump(int numLines,
+ boolean liveObjectsOnly,
+ PrintStream printStream) {
try {
- Process p = Runtime.getRuntime().exec(CMD + ARGS + getProcessId());
+ String args = liveObjectsOnly ? LIVE_HISTO_OPTION : ARGS;
+ Process p = Runtime.getRuntime().exec(CMD + args + getProcessId());
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream(), Charset.defaultCharset()));
- printStream.println("JMap histo dump at " + new Date());
+ printStream.println("JMap " +
+ (liveObjectsOnly ? "histo:live" : "histo") +
+ " dump at " + new Date());
String line = in.readLine();
for (int i = 0; i < numLines && line != null; ++i) {
printStream.println("--\t" + line);
http://git-wip-us.apache.org/repos/asf/giraph/blob/400b7706/giraph-core/src/main/java/org/apache/giraph/utils/JMapHistoDumper.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/main/java/org/apache/giraph/utils/JMapHistoDumper.java b/giraph-core/src/main/java/org/apache/giraph/utils/JMapHistoDumper.java
index aedee6c..3bcf42e 100644
--- a/giraph-core/src/main/java/org/apache/giraph/utils/JMapHistoDumper.java
+++ b/giraph-core/src/main/java/org/apache/giraph/utils/JMapHistoDumper.java
@@ -36,6 +36,8 @@ public class JMapHistoDumper implements MasterObserver, WorkerObserver {
private int sleepMillis;
/** How many lines of output to print */
private int linesToPrint;
+ /** Should only print live objects */
+ private boolean liveObjectsOnly;
/** The jmap printing thread */
private Thread thread;
@@ -75,7 +77,7 @@ public class JMapHistoDumper implements MasterObserver, WorkerObserver {
@Override
public void run() {
while (!stop) {
- JMap.heapHistogramDump(linesToPrint);
+ JMap.heapHistogramDump(linesToPrint, liveObjectsOnly);
try {
Thread.sleep(sleepMillis);
} catch (InterruptedException e) {
@@ -100,6 +102,7 @@ public class JMapHistoDumper implements MasterObserver, WorkerObserver {
public void setConf(ImmutableClassesGiraphConfiguration configuration) {
sleepMillis = GiraphConstants.JMAP_SLEEP_MILLIS.get(configuration);
linesToPrint = GiraphConstants.JMAP_PRINT_LINES.get(configuration);
+ liveObjectsOnly = GiraphConstants.JMAP_LIVE_ONLY.get(configuration);
}
@Override