Technical Blog Post
Improving Stability in Low Memory Situations
When following the current Best Practices for Performance white paper, one of the Generic JVM arguments that is recommended is to set the -Xdisableexplicitgc parameter. Setting this parameter turns a
System.gc() call into a no-op.
This parameter works well for the vast majority of our clients. However, there have been a few cases where JVM memory is fairly tight due to the specific workloads that the end users are generating. In some cases, requests for object memory grow faster than the Java virtual machines decides to perform garbage collection, and an out of memory condition can occur.
One way to avoid this situation is to modify the Generic JVM arguments string for each of the User Interface JVMs to remove the -Xdisableexplicitgc parameter and replace it with the follow two parameters: -Dsun.rmi.dgc.server.gcInterval=900000 -Dsun.rmi.dgc.client.gcInterval=900000.
These two parameters ensure that garbage collections occur at least every 15 minutes. When our clients that were experiencing out of memory errors enabled these parameters, the memory issues disappeared.
So, if you can see from your garbage collection log that garbage collections aren't occurring fast enough and that heap memory usage is growing quickly, you might want to try these settings to see if that helps you situation.
To use these settings, login to the Integrated Solutions Console for Websphere Application Server, and selectServers → Server Types → WebSphere application servers → <server_name> → Process definition → Java Virtual Machine. Look for the field called Generic JVM arguments, and make the changes as outlined above.