This tutorial will illustrate how to configure JVM Settings in a WildFly / JBoss EAP Domain
The JVM settings of WildFly / JBoss EAP Domain Domain server instances can be configured at different levels: At Host Controller level, at Server Group level and on individual Server level.
A default jvm configuration is defined on each Host Controller:
<jvm name="default">
<heap size="64m" max-size="256m"/>
<jvm-options>
<option value="-server"/>
<option value="-XX:MetaspaceSize=96m"/>
<option value="-XX:MaxMetaspaceSize=256m"/>
<option value="--add-exports=java.base/sun.nio.ch=ALL-UNNAMED"/>
</jvm-options>
</jvm>
The attribute size controls the the initial heap size allocated by the JVM, while the max-size controls the the maximum heap size that can be allocated by the JVM.
You can control -XX JVM options (such as Garbage Collection Algorithms) through the option element of jvm-options.
The Host Controller JVM settings for the “default” jvm can be changed by setting any of its attributes
/host=host1/jvm=default:write-attribute(name=max-heap-size,value=1024)
You can also create a new JVM definition for your Host Controller by using the add operation, which allows to specify the initial attribute of the JVM:
/host=host1/jvm=large_jvm:add(heap-size=2048m, max-heap-size=2048m, max-permgen-size=512m, stack-size=1024k, jvm-options=["-XX:-UseParallelGC"])
Overriding the Host Controller JVM settings
The Host Controller JVM settings can be overridden if you have JVM settings defined at Server Group level as in this example:
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="1000m" max-size="1000m"/>
</jvm>
<socket-binding-group ref="full-sockets"/>
</server-group>
Here is, for example, how to define the Initial Heap size in the main-server-group:
/server-group=main-server-group/jvm=default:write-attribute(name=heap-size,value=512)
Here is on the other hand how you can set the maximum heap size in the same Server Group:
/server-group=main-server-group/jvm=default:write-attribute(name=max-heap-size,value=1512)
This is the result on your configuration of the above changes:
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="512" max-size="1512"/>
</jvm>
<socket-binding-group ref="full-sockets"/>
</server-group>
The Server Group configuration can in turn be overridden at Server level. As an example, we will see how to apply specific JVM settings for the Server “server-one”.
First of all, let’s check if the Server already has a custom jvm setting:
/host=host1/server-config=server-one:read-children-resources(child-type=jvm)
{
"outcome" => "success",
"result" => {}
}
As confirmed by its configuration, the Server server-one has no custom JVM settings:
<servers>
<server name="server-one" group="main-server-group"/>
</servers>
Therefore you need to add the JVM settings, which allows to set the values for it:
/host=host1/server-config=server-one/jvm=default:add(heap-size=1024,max-heap-size=1024)
If the JVM attribute is already defined for a server, then you can simply use the write-attribute operation:
[/host=host1/server-config=server-one/jvm=default:write-attribute(name=heap-size,value=512)
What is the purpose of the JVM settings contained in domain.conf? These settings do not affect the individual Servers of the Domain but just the Host Controller JVM Process.