Hi Mikael, thanks yes, it could be a separate cmd GC.runForce... However
I was thinking if you can get as far as having your jcmd executed, you
really _do_ want to run that collection. Whatever behaviour you were
protecting against when you chose the command-line arguments, you would
only ever want to override if you run the jcmd to invoke GC... 8-)
I'll convert this to a review request for removing that check, will post
that shortly. This would be changing the behaviour, but I don't think
it contradicts anything we document, and we seem to have added the check
without documenting it.
Thanks
Kevin
On 28/08/2017 16:01, Mikael Gerdin wrote:
Hi Kevin,
On 2017-08-22 16:38, Kevin Walls wrote:
Hi,
jcmd GC.run to invoke GC fails if -XX:+DisableExplicitGC is set: this
seems like a mistake?
This behaviour is obstructive for a live app that _needs_ a GC, and
was started with -XX:+DisableExplicitGC.
DisableExplicitGC to protect from Java code calling System.gc
frequently makes sense, but if I can attach and run a dcmd, I should
have permission to inspect and maintain the JVM, including invoking a
GC. (This is as the user who owns the process and can kill it off.)
The behaviour (checking DisableExplicitGC in SystemGCDCmd::execute)
comes in with:
https://bugs.openjdk.java.net/browse/JDK-8004095
8004095: Add support for JMX interface to Diagnostic Framework and
Commands
The JMX relation I suppose suggests we didn't want JMX to override
DisableExplicitGC by way of using a jcmd/DCmd.
But also, we now have:
8072913: [REDO] GCCause should distinguish jcmd GC.run from System.gc()
Summary: GCCause which is caused by GC.run diagnostic command should
be different from System.gc() .
..at least the causes are distinct.
I don't think we document this clearly. Our comment in globals.hpp
is ""Ignore calls to System.gc()". I don't think we say anywhere
that jcmd is subject to being disabled by the flag.
Interested to hear any reason in favour of the current behaviour! If
there's nothing, I'll log a bug and ask for review of the change to
remove it...
There were some discussions earlier around this area and I came up
with the idea of having a "force" option to the GC.run command to
override DisableExplicitGC.
The comments in globals.hpp are a notoriously bad spec for the flags
since they are only ever present in debug builds of the JVM.
Thanks
/Mikael
Thanks
Kevin