Dear All,
            I want to get your suggestion about adding a new internal command 
to solve the argument passing problem of jmap alike tools.

             We recently encounter a problem when adding the 4th option 
(“parallel”) to jmap -dump, it failed because there is limitation of max number 
of arguments passed to JVM in attach API. As limited by arguments length at 
https://github.com/openjdk/jdk/blob/95d73129ce5074d3510710e7e238761a9af9ef3a/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java#L144
  and arg_count_max at 
https://github.com/openjdk/jdk/blob/95d73129ce5074d3510710e7e238761a9af9ef3a/src/hotspot/share/services/attachListener.hpp#L138.

             And simply enlarge this  limitation is not acceptable because it 
cause old version of jmap command hang when working with new JVM, which has 
been encountered and disscussed before at 
https://mail.openjdk.java.net/pipermail/serviceability-dev/2019-February/027240.html,
 However the problem was not fix at that time because the limitation is 
modified unnecessarily and simply revert the change is ok.

            As mentioned, now we are facing the problem when developing the 
parallel heap dump, which introduced the 4th argument “parallel=<N>” into jmap 
-dump command. We (Chris, Serguei, Hamlin and I) recently discussed it and 
Chris has suggested a solution to fix this kind of issue by introducing a new 
internal command “dumpheapext”. When “jmap -dump” command work with “parallel” 
option, it issues “dumpheapext” command instead of “dumpheap” command, and this 
dumpheapext has same argument passing protocal with JVM – e.g. “all arguments 
passed is combined into one string, passing the whole string to jvm, and the 
jvm parse it to get correct ones”.

            With this change, old jvm will print error like “Operation 
dumpheapext not recognized!” when work with new “jmap -dump:parallel=<n>” 
command.  IMO this is not perfact as error message like “unsupported argument 
parallel=<n>”, but the command behaves correctly and in this way there is no 
severe compatibility issue introduced.

            Here are some of the discussions before, FYI:

  1.  https://github.com/openjdk/jdk/pull/2261 - Parallel heap dump PR, with 
latest commit of dumpheapext command prototype. Also some history of the story 
included in this PR.
  2.  https://github.com/openjdk/jdk/pull/2379 -  improve jcmd 
GC.class_histogram to support parallel, we also discussed serveral solution 
here.
  3.  
https://mail.openjdk.java.net/pipermail/serviceability-dev/2019-February/027240.html
 The problem encountered proviously, and also discussions related.



BRs,
Lin

Reply via email to