The most important aspect of tuning your PAS for OpenEdge instance is the JVM stack, heap, and metaspace memory allocations and garbage collection. The memory configuration ultimately determines how many and the type of web applications that can be deployed on the PAS for OpenEdge instance and the number of clients that the instance can support for those web applications.

PAS for OpenEdge process memory and garbage collection are a critical part of your tuning strategy. PAS for OpenEdge instances perform poorly when either the heap or metaspace memory regions run low on space. To keep memory available to the JVM, its garbage collector must run periodically to reclaim unused space. Each time the garbage collector runs, it stops all of the other JVM threads such as client HTTP request execution threads.

If the garbage collector runs too infrequently:
  • Large amounts of unusable memory may accumulate.
  • The collection process takes longer and results in spikes in client response times.
If the garbage collection process runs too frequently:
  • You lose CPU cycles while checking the entire memory space.
  • Client response times grow longer due to constant CPU drain by garbage collection cycles.

The goal is to ensure that PAS for OpenEdge has sufficient heap and metaspace memory allocated to handle the loading of web applications, web application memory allocations, and concurrent client requests to reduce garbage collection processing time.

The properties that influence memory consumption include:

  • The number and type of web applications deployed
  • The size of the HTTP request thread pool
  • The number of concurrent requests and the data size of those requests

The following JVM parameters configured in the instance-name/conf/jvm.properties file are relevant in determining memory and garbage collection limits:

Property Default Description
-Xms<size> 512m Initial Java heap size
-Xmx<size> 1024m Maximum Java heap size
-Xss<size> 1024k Java thread stack size
-XX:NewSize 64m Initial space used for short duration objects and indirectly how often garbage collection runs
-XX:MaxNewSize 64m Maximum space used for short duration objects
-XX+DisableExplicitGC Disable explicit garbage collection
-XX:MetaspaceSize unlimited Initial Metaspace size.

Tuning tips

  • Reduce the frequency of garbage collection by starting the JVM with a larger maximum heap memory space (-Xmx).
  • Reduce repeated reallocation of heap memory by setting the initial heap memory space equal to the maximum amount (-Xms == -Xmx).
  • Reduce repeated reallocation of metaspace memory by setting the initial size equal to the maximum size (-XX:MetaspaceSize == -XX:MaxMetaspaceSize).
  • Carefully lower the JVM stack size (-Xss) to save process memory for heap and metaspace allocations.
  • Increase metaspace memory when an instance stops due to an out-of-metaspace error.