Once the critical-heap-percentage is exceeded, operations do not complete, instead throwing a LowMemoryException for Region.put(), Region.create(), Region.putAll(), any index creation operation, and at the execution of any function. This continues until the tenured heap usage falls more than 2% below the configured critical-heap-percentage, at which point the system returns to normal operation without intervention.

Exceeding this threshold implies that the member is about to run out of tenured heap memory, and the Java garbage collector has not been able to reduce the quantity of allocated memory. Since further heap allocations would likely cause an OOME, the member does not complete those operations that require further memory allocations. Exceeding this threshold signals that a significantly larger than expected burst of allocations occurred or that something is critically wrong with the member. If not a burst, then a non-trivial fix or redesign will be needed. Something is not right in the design or in the sizing of the jvm for the current set of regions that this member hosts.

Be aware that exceeding the threshold on one member may affect other members. With operations not completing, the system may revoke the membership of the member that is above the critical-heap-percentage. This can cause the remaining members to increase their usage of memory to compensate for the missing member. If these remaining members are not sized to handle the increased load, the critical heap threshold issue may cascade through the system.

Symptoms May Include

Action to Take

Temporary Measures

Redesign Actions

Redesign falls into 3 categories. More than one action in more than one category may be appropriate to mitigate the issue.

  1. Increase the amount of available memory. The increase may need to be applied to all the members.

  2. Tune garbage collection.

  3. Modify the system's regions so that less heap space is used.