WildFly JVM Settings: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 115: Line 115:


===Precedence Rules===
===Precedence Rules===
At least for EAP 7.0.5, it seems that ''both'' domain.xml and host.xml settings are applied to the server node:
<pre>
... /opt/jdk/bin/java -D[Server:app02] -Xms255m -Xmx765m -server -XX:MetaspaceSize=96m -XX:MaxMetaspaceSize=256m -server -XX:MetaspaceSize=95m -XX:MaxMetaspaceSize=255m ...
</pre>
which shows that it's best to only specify a configuration in just one location.

Revision as of 03:36, 5 April 2017

Internal

Overview

JVM settings can be declared in various server configuration files, as shown below. In domain mode, the settings declared in XML configuration files (domain.xml, host.xml) propagate to server node JVMs and they are subject to precedence rules; the process controller and host controller JVM settings are declared in domain.conf.

Configuration

Standalone Mode

Modify standalone.conf as follows:

    ...
    JAVA_OPTS="-Xms1000m -Xmx2000m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m ..."
    ...

Even if standalone*.xml allows for a <jvm> element, it seems it is not honored when specified. More research is needed on this.

Domain Mode

In domain mode, the settings declared in XML configuration files domain.xml and host.xml propagate to server node JVMs and they are subject to precedence rules. Process controller and host controller JVM settings are declared in domain.conf.

domain.conf

Declare the JVM settings for both process controller and host controller:

...
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms64m -Xmx512m -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true"
...

By default, both JVM types share the same configuration, but it can be differentiated by using HOST_CONTROLLER_JAVA_OPTS and PROCESS_CONTROLLER_JAVA_OPTS environment variables, as in the following example:

if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Djava.net.preferIPv4Stack=true"
   ...
fi

if [ "x$PROCESS_CONTROLLER_JAVA_OPTS" = "x" ]; then
    PROCESS_CONTROLLER_JAVA_OPTS="-Xms52m -Xmx252m -XX:MaxMetaspaceSize=122m $JAVA_OPTS"
fi

if [ "x$HOST_CONTROLLER_JAVA_OPTS" = "x" ]; then
    HOST_CONTROLLER_JAVA_OPTS="-Xms53m -Xmx253m -XX:MaxMetaspaceSize=123m $JAVA_OPTS"
fi

...

domain.xml

<domain ...>
    ...
    <server-groups>
        <server-group name="...">
            <jvm java-home="..." 
                    type="SUN|IBM" 
                    env-classpath-ignored="true"
                    debug-enabled="false"
                    debug-options="...">
                <heap size="" max-size=""/>
                <permgen>...</permgen>
                <stack>...</stack>
                <agent-lib>...</agent-lib>
                <agent-path>...</agent-path>
                <java-agent>...</java-agent>
                <jvm-options>
                    <option name="...">....</option>
                     ...
                </jvm-options>
                <environment-variables>...</environment-variables>
                <launch-command>...</launch-command>
            </jvm>
        </server-group>
    </server-groups>
    ...
</server>

Example:

<jvm>
    <heap size="1000m" max-size="2000m"/>
    <jvm-options>
        <option value="-server"/>
        <option value="-XX:MetaspaceSize=256m"/>
        <option value="-XX:MaxMetaspaceSize=512m"/>
    </jvm-options>
</jvm>

host.xml

host.xml allows "named" <jvm> declarations.

<host ..>
    ...
    <jvms>
        <jvm name="jvm-a" ...>
        </jvm name="jvm-b" ...>
        ...
    </jvms>
    ...
</host>

Precedence Rules

At least for EAP 7.0.5, it seems that both domain.xml and host.xml settings are applied to the server node:

... /opt/jdk/bin/java -D[Server:app02] -Xms255m -Xmx765m -server -XX:MetaspaceSize=96m -XX:MaxMetaspaceSize=256m -server -XX:MetaspaceSize=95m -XX:MaxMetaspaceSize=255m ...

which shows that it's best to only specify a configuration in just one location.