PingDirectory

PingDirectory server process memory

The PingDirectory server consists mainly of a Java Virtual Machine (JVM) heap and a marginal amount of memory allocated by the JVM’s execution of native code.

Although the JVM heap is referred to frequently as the maximum memory consumed by the PingDirectory server, the actual process size is slightly larger than the Xmx value because of the accumulation of small chunks of native code that Java requires for items such as SSL sockets.

A figure demonstrating the Java Development Kit (JDK) Heap Structure. The New Gen (new generation) is separated from the Old Gen (old generation), and the fully populated Database Cache is within the old generation, as described in the paragraph following the figure.

Within the JVM heap, the principal memory components are the new and old generations. The new generation is a smaller area of memory where all data is initially allocated, with frequent garbage collection. Any data that’s present long enough is promoted to the old generation for the longer term. The old generation is where the database cache eventually resides. The old generation’s size isn’t explicitly stated in the JVM options; it’s computed from the leftover heap after defining the MaxHeapSize and new generation sizes.

A typical set of generation definitions for the JVM is as follows, where mx and ms values represent the heap size:

-Xmx16g -Xms16g -XX:MaxNewSize=2g -XX-NewSize=2g

The mx and ms values should always be the same, and the MaxNewSize and NewSize values should be the same. This helps avoid negative changes in performance.

The setup and dsjavaproperties tools set MaxNewSize and NewSize values based on the results of extensive performance testing and shouldn’t need to be changed.