-
Enhancement
-
Resolution: Done
-
Major
-
None
-
None
Since PermGen is no longer used, and has been replaced by Metasize, we probably need to alter the initial startup values. Current WF is using:
-XX:MaxMetaspaceSize=256m
After some testing with garbage collection logging on (-verbose:gc -Xloggc:hcgc.log -XX:+PrintGCDateStamps -XX:MetaspaceSize=XX), the GC logs were monitored for at least one occurrence of a full GC due to Metadata threshold (example [Full GC (Metadata GC Threshold) 39592K->20187K). Using this information, minimum levels of Metasize for various configurations were determined.
The numbers below are the values used for -XX:MetaspaceSize=XXM followed by the number of full GCs triggered at that amount measured during boot of WF10-full:
Standalone:
standalone.xml 52MB(1), 53MB(0)
standalone-full.xml 64MB(1), 65MB(0)
standalone-ha.xml 52MB(1), 54MB(0)
standalone-full-ha.xml 79MB(1), 80MB(0)
For domain mode, the corresponding values were determined to be:
Process Controller: 12MB(1), 13MB(0)
Host Controller: 39MB(1), 40MB(0)
In domain mode, a very slight, non-scientifically measured boot time difference was observed (1769ms default Metasize vs 1694ms with 40m MetaSize set for host controller).
The approximate cost of increasing MetaSize over the default is summerized below (using top to collect RSS after server boot):
JBoss AS 7.1.1: (default permgen (-XX:PermSize=256m -XX:MaxPermSize=256m), JDK 7)
Configuration | RSS(KB) |
---|---|
standalone.xml | 182,652 |
standalone-ha.xml | 211,672 |
standalone-full.xml | 217,636 |
standalone-full-ha.xml | 289,524 |
domain: | |
Server-one: | 227,220 |
Server-two: | 234,944 |
PC: | 37,584 |
HC: | 138,428 |
Wildfly 10: (default Metasize == 21M)
Configuration | RSS(KB) |
---|---|
standalone.xml | 293,576 |
standalone-ha.xml | 303,344 |
standalone-full.xml | 388,660 |
standalone-full-ha.xml | 478,576 |
domain: | |
Server-one: | 379,076 |
Server-two: | 377,516 |
PC: | 55,000 |
HC: | 272,120 |
Wildfly 10: (Metasize == 64M)
standalone.xml | 290,236 |
standalone-ha.xml | 306,032 |
standalone-full.xml | 396,596 |
standalone-full-ha.xml | 501,576 |
domain: | |
Server-one: | |
Server-two: | |
PC: | |
HC: |
Wildfly 10: (Metasize == 96M)
Configuration | RSS(KB) |
---|---|
standalone.xml | 317,996 |
standalone-ha.xml | 306,516 |
standalone-full.xml | 416,008 |
standalone-full-ha.xml | 460,952 |
domain: | |
Server-one: | 380,816 |
Server-two: | 374,300 |
PC: | 55,308 |
HC: | 273,220 |
Additional measurements. Using just Wildfly-core, the following RSS sizes are measured for the indicated Metasize:
Wildfly-10 Core master
Metasize | RSS(KB) |
---|---|
21m | 117,760 |
64m | 120,772 |
96m | 131,104 |
There is little boot time impact on the change:
Wildfly-10 Core master
Metasize | Boot time (MS) |
---|---|
21m | 2127 |
64m | 2066 |
96m | 2099 |
Based on the memory impact of defaulting to 96M (approx 30mb initially over the default value of 21mb), it would seem to make sense to use this as a default value, which allows maintaining boot times without incurring a full GC due to Metasize and provides enough initial Metasize to both start the application server and perhaps deploy an application without incurring any performance penalty.
An additional note: host*.xml has JVM params set to MetaspaceSize=256m, which is probably too large an initial value.
- clones
-
WFCORE-1319 Suggested defaults for Metasize and Java 8
- Resolved