On Thu, 14 Mar 2024 13:43:09 GMT, Matthias Baesken <mbaes...@openjdk.org> wrote:

>> Currently jcmd command GC.heap_dump only works with an additionally provided 
>> file name.
>> Syntax : GC.heap_dump [options] <filename>
>> 
>> In case the JVM has the XX - flag HeapDumpPath set, we should support an 
>> additional mode where the <filename> is optional.
>> In case the filename is NOT set, we take the HeapDumpPath (file or 
>> directory);
>> 
>> new syntax :
>> GC.heap_dump [options] <filename> .. has precedence over second option
>> GC.heap_dump [options] …in case -XX: HeapDumpPath=p is set
>> 
>> This would be a simplification e.g. for support cases where a filename or 
>> directory is set at JVM startup with -XX: HeapDumpPath=p and writing to the 
>> path is intended/recommended for usage also in the jcmd case.
>
> Matthias Baesken has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   add test HeapDumpJcmdPresetPathTest

Changes requested by cjplummer (Reviewer).

src/hotspot/share/runtime/globals.hpp line 565:

> 563:           "triggered by jcmd GC.heap_dump without specifying a path, "   
>    \
> 564:           "the path (filename or directory) of the dump file "           
>    \
> 565:           "(defaults to java_pid<pid>.hprof in the working directory)")  
>    \

This incorrectly leads one to conclude that if HeapDumpPath is not specified 
and GC.heap_dump is used without specifying a path, the default will be 
java_pid<pid>.hprof in the working directory. That's not the case. The jcmd 
will produce an error because it requires that either HeapDumpPath be specified 
or a filename be specified as a jcmd argument (I'm not sure why the jcmd does 
not default to java_pid<pid>.hprof) 

Also, if you are cleaning up this text, I would suggest changing "is on" to "is 
enabled".  Same for HeapDumpGzipLevel below.

src/hotspot/share/services/diagnosticCommand.cpp line 475:

> 473: HeapDumpDCmd::HeapDumpDCmd(outputStream* output, bool heap) :
> 474:                            DCmdWithParser(output, heap),
> 475:   _filename("filename","Name of the dump file", "STRING", false, 
> "-XX:HeapDumpPath"),

I can't say I like using the "default" in this manner, but I understand why it 
was done. I wish there was a better way. I ran into a similar problem with 
Compiler.perfmap in #17359, but this case is a bit worse. For Compiler.perfmap 
the default had to be specified as `/tmp/perf-<pid>.map`, but at least it 
somewhat resembled the actual default.

Maybe it would help if you used something a bit more descriptive, like "The 
path specified by "-XX:HeapDumpPath".

You also should update jcmd.l to describe this argument much like I did for 
Compiler.perfmap. You especially need to call out that if -XX:HeapDumpPath is 
not used then the "filename" argument must be speified.

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

PR Review: https://git.openjdk.org/jdk/pull/18190#pullrequestreview-1937265589
PR Review Comment: https://git.openjdk.org/jdk/pull/18190#discussion_r1525211803
PR Review Comment: https://git.openjdk.org/jdk/pull/18190#discussion_r1525223292

Reply via email to