Symptom
One or several sessions are terminated with a "java.lang.OutOfMemoryError: GC overhead limit exceeded" exception.
Before this occurs, the Runtime has run a quite big number of sessions which ended at about the same time (in the same minute).
Solution
The problem may come from the memoryLogCacheDelay runtime property.
When a session ends, the runtime keeps session data in memory, during the time defined in this property.
This allows to consult the session data from the designer, without the runtime having to reload the information from the log database.
So, when there are a lot of sessions ending at the same time, a lot of memory is used to keep all this data.
You can set the memoryLogCacheDelay parameter to 0, so sessions will not be kept anymore in memory.
Less memory will be used, but the runtime will now have to reload from database all the data for each consultation on the designer.
Or you can set a shorter value (in milliseconds) than before to try if it is sufficient.
By default you can find this parameter in:
<runtimeDirectory>/properties/engines/commonParameters.xml