I am using Apache Storm topology on a server using Java 7 JVM. I reviewed some JVM settings and noticed that it currently uses the Concurrent Mark and Sweep (CMS) garbage collector. This makes sense, since the server has 32 cores and while it uses several JVMs with this parameter, it only works with 4 such JVMs, which are less than 32 cores.
However, I noticed that we are running the garbage collector with the setting disabled CMSConcurrentMTEnabled. By default, this option is turned on, which makes me wonder why someone would want to use one thread for garbage collection at the same time, when other threads are available. Under what conditions does the use of this parameter make sense if other streams are available?
(Editing for more details about my current situation, hoping this will lead to an answer):
The JVM seems to run out of memory, repeatedly run small GCs that take ~ 9 seconds each, and eventually crash. No has OutOfMemoryErrorbeen cast that puzzles me. Small GCs clear a few kilobytes each time, and overall usage for quite a while is around 100%. The heap size is 4 GB, so these conditions should trigger OutOfMemoryError. However, I fear that this will fall into a very localized situation for the SO issue.
source
share