PEGA0028 alert: GC cannot reclaim memory from memory pools
Memory in a Java Virtual Machine (JVM) is divided into several memory pools that vary in size, number, and purpose across different JVM vendor implementations. Each JVM has a memory pool associated with long-lived object storage and another memory pool that is associated with class storage.
The PEGA0028 alert is generated after the JVM has used garbage collection (GC) to reclaim memory from one of these memory pools, but the garbage collection failed to reduce the used memory below a specified threshold (expressed as a percentage of the memory pool size). For example, the JVM attempts to collect the long-lived object memory pool. If the threshold for the long-lived object memory pool is set to 90% and the amount of used memory in that pool is 93%, an alert is generated.
Alert message description
Collection usage threshold exceeded for a memory pool.
Example message text
Collection usage threshold exceeded for long-lived object memory pool (Tenured Gen) INFO:MemoryPool=Tenured Gen;PoolType=long-lived object;Event=java.management.memory.collection.threshold.exceeded;TimeStamp=2008-02-01 20:13:18,239 GMT;Count=16;NotificationSequenceNo=16;Threshold=74337484; Used=83404504;Max=743374848;Committed=247791616;Init=247791616
Default prconfig.xml settings
<env name="alerts/memory/enabled" value="true"/>
<env name="alerts/memory/overrideexistingthreshold" value="false"/>
<env name="alerts/memory/longlivedobjectpool/percentused" value="90"/>
<env name="alerts/memory/classstoragepool/percentused" value="90"/>
<env name="alerts/memory/onalert/performthreaddump" value="false"/>
<env name="alerts/memory/onalert/performheapdump" value="false"/>
<env name="alerts/memory/onalert/heapdumpfiledirecory" value="D:\pr_temp\prpcdev"/>
Reasons for the alert
This alert indicates that your application is using JVM memory in a way that can hinder overall system performance, and that the garbage collection processing did not reclaim enough memory to remedy the effect on performance.
Although troubleshooting memory issues can be complex and is beyond the scope of this document, some causes might be easy to identify, such as a single user who has loaded a large list into memory.
Look for PEGA0004 alerts that coincide with this alert to help locate trouble areas.
The following example uses the default threshold of 90% and shows the calculation for determining whether the threshold has been exceeded.
- Max heap size = 4294967296 bytes
- NewSize = 939524096 bytes
- Old Gen = Max heap size – NewSize = 3355443200 bytes
The threshold in the alert is 3019898880, which is 90% of Old Gen.
Collection usage threshold exceeded for long-lived object memory pool (CMS Old Gen) INFO:MemoryPool=CMS Old Gen;PoolType=long-lived object;Event=java.management.memory.collection.threshold.exceeded;TimeStamp=2017-02-14 12:58:14,286 GMT;Count=155;NotificationSequenceNo=155;Threshold=3019898880;Used=3043627520;Max=3355443200;Committed=3355443200;Init=3355443200;*