Passing command line options to Java [Was: Re: Heap Size Ergonomics in docker containers]
Thomas Schatzl
thomas.schatzl at oracle.com
Thu Nov 2 09:09:13 UTC 2017
Hi Ruslan,
On Wed, 2017-11-01 at 11:30 +0100, Ruslan Synytsky wrote:
> Hi Thomas, thank you for the feedback. Please see inline.
>
> [...]
>
> > There is JAVA_TOOL_OPTIONS, which are always prepended to the java
> > VM command line. See the description [0] for more information.
>
> Indeed this option is close to what I was looking for! But seems
> JAVA_TOOL_OPTIONS does not work for Xmx. Just a quick test with Java
> HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
>
> Default
> $ java -XX:+PrintFlagsFinal -version | grep MaxHeapSize
> size_t MaxHeapSize = 643825664
> {product} {command line}
>
> Define Xmx = 2GB via JAVA_TOOL_OPTIONS
> $ export JAVA_TOOL_OPTIONS="-Xmx2g"
> $ java -XX:+PrintFlagsFinal -version | grep MaxHeapSize
> Picked up JAVA_TOOL_OPTIONS: -Xmx2g
> size_t MaxHeapSize = 643825664
> {product} {command line}
>
> It says that Xmx has been picked up, but in reality it has not been
> applied.
Hmm, it seems to work here.
E.g.
$ java -XX:+PrintFlagsFinal HelloWorld | grep MaxHeap
size_t MaxHeapSize = 3072327680
{product} {ergonomic}
$ JAVA_TOOL_OPTIONS=-Xmx100m java -XX:+PrintFlagsFinal HelloWorld |
grep MaxHeap
Picked up JAVA_TOOL_OPTIONS: -Xmx100m
size_t MaxHeapSize = 104857600
{product} {command line}
$ echo $JAVA_TOOL_OPTIONS
$ export JAVA_TOOL_OPTIONS=-Xmx10m
$ java -XX:+PrintFlagsFinal HelloWorld | grep MaxHeap
Picked up JAVA_TOOL_OPTIONS: -Xmx10m
size_t MaxHeapSize = 10485760
{product} {command line}
(linux-x64, same hotspot build)
(Also tried with surrounding quotes)
(It does not matter whether you specify a java class on the command
line or not).
There is a note in the documentation that prevents use of it under
particular circumstances, but then according to the code the VM would
not print the "Picked up" line.
I haven't seen an issue reported with that anywhere either.
>
> Define Xmx = 3GB via _JAVA_OPTIONS
> $ export _JAVA_OPTIONS="-Xmx3g"
> $ java -XX:+PrintFlagsFinal -version | grep MaxHeapSize
> Picked up JAVA_TOOL_OPTIONS: -Xmx2g
> Picked up _JAVA_OPTIONS: -Xmx3g
> size_t MaxHeapSize = 3221225472
> {product} {command line}
>
> Now it works as expected. However, another issue is that
> _JAVA_OPTIONS is undocumented and hotspot-specific?...
I did not mention _JAVA_OPTIONS because I thought it wouldn't fit your
requirements and overwrites existing options. Also it's undocumented as
you noted.
There is another way to specify multiple java arguments via argument
files using the "@" parameter which in some cases may be more useful
than the other options.
Thanks,
Thomas
More information about the hotspot-gc-dev
mailing list