Disclaimer: I am not a Java expert. My knowledge of Java is limited to System.out.println to be honest.
We have been noticing performance issues (application doesn't respond for couple of minutes every hour) with one of our systems and decided to monitor the JVM running the application (please refer the attached screenshot of VisualVM monitoring tab).
What we have observed is that the JVM just freezes up for ~2 minutes every hour and then the used heap size drops and thread count shoots up. The used heap size otherwise maintains itself within the 6G-12G range, but once every hour this pattern is broken.
Is there any possible explanation for this behaviour? It is periodic in nature (like I said, every 1 hour). Checked the task manager during this time and could not see any other processes kick in.
Please also find the JVM arguments below.
-Xmx20480M
-XX:PermSize=128M
-XX:MaxPermSize=256M
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-Xms20480M
-XX:NewSize=10240M
-XX:SurvivorRatio=4
-XX:+UseCompressedOops
-XX:CMSInitiatingOccupancyFraction=60
-XX:+UseStringCache
-XX:+UseFastAccessorMethods
-XX:ErrorFile=c:/hs_err.log
-XX:HeapDumpPath=c:/
-XX:+HeapDumpOnOutOfMemoryError
-Xrs
The application runs on a server with 32G RAM and 8 core processor, if that helps.