[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    jhsdb jmap cannot set heapdump name
From:       Yasumasa Suenaga <yasuenag () gmail ! com>
Date:       2016-04-25 14:06:05
Message-ID: a2f35a6c-bf16-be56-d767-0eea28fcb1f7 () gmail ! com
[Download RAW message or body]

Hi all,

We cannot change heapdump name (heap.bin) when we genarate heapdump via jhsdb.
I want to set it like a jmap.

I think we can change SALauncher and JMap.
For example, in SALauncher side, I think we can add --dumpfile option as below:
----------------------
diff -r 3d289e4ba366 \
                src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/SALauncher.java
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/SALauncher.java       Fri \
                Apr 22 19:40:39 2016 +0200
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/SALauncher.java       Mon \
Apr 25 22:48:03 2016 +0900 @@ -73,6 +73,7 @@
          System.out.println("    <no option>\tto print same info as Solaris pmap");
          System.out.println("    --heap\tto print java heap summary");
          System.out.println("    --binaryheap\tto dump java heap in hprof binary \
format"); +        System.out.println("    --dumpfile\tname of the dump file");
          System.out.println("    --histo\tto print histogram of java object heap");
          System.out.println("    --clstats\tto print class loader statistics");
          System.out.println("    --finalizerinfo\tto print information on objects \
awaiting finalization"); @@ -241,13 +242,15 @@
      private static void runJMAP(String[] oldArgs) {
          SAGetopt sg = new SAGetopt(oldArgs);
          String[] longOpts = {"exe=", "core=", "pid=",
-              "heap", "binaryheap", "histo", "clstats", "finalizerinfo"};
+              "heap", "binaryheap", "dumpfile=", "histo", "clstats", \
"finalizerinfo"};

          ArrayList<String> newArgs = new ArrayList();
          String pid = null;
          String exe = null;
          String core = null;
          String s = null;
+        String dumpfile = null;
+        boolean requestHeapdump = false;

          while((s = sg.next(null, longOpts)) != null) {
              if (s.equals("exe")) {
@@ -267,7 +270,11 @@
                  continue;
              }
              if (s.equals("binaryheap")) {
-                newArgs.add("-heap:format=b");
+                requestHeapdump = true;
+                continue;
+            }
+            if (s.equals("dumpfile")) {
+                dumpfile = sg.getOptarg();
                  continue;
              }
              if (s.equals("histo")) {
@@ -284,6 +291,16 @@
              }
          }

+        if (requestHeapdump) {
+            if (dumpfile == null) {
+                newArgs.add("-heap:format=b");
+            } else {
+                newArgs.add("-heap:format=b,file=" + dumpfile);
+            }
+        } else if (dumpfile != null) {
+            throw new IllegalArgumentException("dumpfile does not need.");
+        }
+
          buildAttachArgs(newArgs, pid, exe, core, false);
          JMap.main(newArgs.toArray(new String[newArgs.size()]));
      }
----------------------

What do you think about it?
If it is accepted, I will file it to JBS and send review request.


Thanks,

Yasumasa


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic