On Tue, 23 Feb 2021 23:00:30 GMT, Chris Plummer <cjplum...@openjdk.org> wrote:

>> Dear @plummercj, 
>> 
>> I have reconsidered the solution of “dumpheapext”, IMHO maybe the name is 
>> too specific, for example, if in future there is more arguments for 
>> `-histo`, we have to made another command called "inspectheapext".
>>  
>> How about create a new command named (e.g.) "jmapext", and make the 
>> "dumpheapext" work as the subcommand and be passed to JVM as the 1st 
>> argument of "jmapext".  Then in future we don't bothering adding new 
>> command, just subcommand (or argument) like "inspectheapext". And hence 
>> there may be more easier to extend other commands? 
>> 
>> What do you think? 
>> 
>> BRs,
>> Lin
>
>> I have reconsidered the solution of “dumpheapext”, IMHO maybe the name is 
>> too specific, for example, if in future there is more arguments for 
>> `-histo`, we have to made another command called "inspectheapext".
>> 
>> How about create a new command named (e.g.) "jmapext", and make the 
>> "dumpheapext" work as the subcommand and be passed to JVM as the 1st 
>> argument of "jmapext". Then in future we don't bothering adding new command, 
>> just subcommand (or argument) like "inspectheapext". And hence there may be 
>> more easier to extend other commands?
> 
> Well, if you want to go that route, maybe you just add a new command called 
> "attachcmd", and it can support any command, new and old. But then that kind 
> of points out the real issue with existing commands in that they are rigid 
> with how many arguments they support, and I think they all suffer from that.
> 
> There have been other suggestions on how to deal with this, including having 
> the 1st argument include all the arguments. I think the issue there is that 
> it fails with older JDKs. However, the solution for older JDKs might just be 
> the same as is suggested with "dumpheapext", which is just retry using the 
> old argument passing method if the first one fails (and not including any of 
> the new arguments that the old JDK won't understand anyway). So in general, I 
> think any solution we come up with will fail with older JDKs, and need to 
> fallback to retrying with a command we know will work.
> 
> How is `jmap dump:gz=...` working with older JDKs? I tried it against JDK8 
> and didn't get any errors, but it wasn't gzipped either.

Hi @plummercj ,

> maybe you just add a new command called "attachcmd", and it can support any 
> command, new and old

I think make it work only for newly added arguments for different command could 
reduce the implementation complexity. The old command doesn't need to handle 
the exception. 
And I also found in this way the "attachcmd" will be quite similar with `jcmd` 
command, it accept different command and pass all argument with one string. 
Then there maybe another solution -- for "parallel" argument of `jmap -dump`, 
just change it to the `jcmd` command and passing all arguments as a string.  
Then we don't bother with adding the `dumpheapext` command.
 

> So in general, I think any solution we come up with will fail with older 
> JDKs, and need to fallback to retrying with a command we know will work

Yes, no matter what name it is, the new command must have the ablility to eat 
the unsupported command exception and then print error info. 



> How is `jmap dump:gz=...` working with older JDKs? I tried it against JDK8 
> and didn't get any errors, but it wasn't gzipped either.

The older version for `jmap dump` only passing arguments that is recognized 
(`file` and `live or all`), and siliently drop the unrecognized arguments 
without any output. 
I added the logic of print error message in JDK16, with JBS 
https://bugs.openjdk.java.net/browse/JDK-8251347

-------------

PR: https://git.openjdk.java.net/jdk/pull/2261

Reply via email to