Adjust the Java heap size settings

The JVM offers various configuration parameters to control the Java heap memory that is used to run a Java program. The most important parameters are -Xms<value> and -Xmx<value>, which respectively indicate the minimum and the maximum size of the heap memory. The minimum size is the amount of memory allocated on JVM startup. The maximum size is the hard limit on memory allocation: the Java runtime will throw a java.lang.OutOfMemoryError when it needs to allocate more memory on the heap than this.

By default, a JVM has typically an initial heap size of 4 MB and a maximum heap size of 64 MB, though these numbers can vary depending on the platform. Most Java EE application servers or servlet containers use the default heap size to run deployed applications, but this is in general too limited for data-driven applications like an OGC web server. Although LuciadLightspeed applies the concept of lazy data loading as often as possible, there is still a need for sufficient memory to load requested data.

Decoded models are also cached using Java SoftReference objects by default. You still have to ensure sufficient memory is available, though, to prevent the need for frequent garbage collection. It is therefore recommended to adjust these heap size settings, in order to prevent out-of-memory problems and to achieve an optimal performance.

Which parameters should be used highly depends on the configured datasets in the OGC web server and on the hardware platform that is used. It is therefore advisable to profile the actual memory usage of the application at runtime in order to determine the right parameters. For optimal performance, set the minimum and the maximum heap size to the same value. This eliminates the need for incremental increases at runtime, which can reduce performance.

Run the server in a headless environment

On some platforms, such as Unix and Linux, it may not be possible to run a Java application that uses AWT classes like the LuciadLightspeed WMS server in an environment without a display. To resolve this, JDK 1.4 and later versions include a property that allows to run the application in a headless environment: -Djava.awt.headless=true.