For some time I get performance problems with my Java application, I used JavaMelody for profiling and the unusual thing is the "Used Memory" graph. It has a lot of short spikes which seems to reach ~8GB line really fast and then, as I understand, GC is cleaning up the memory. Does someone has the experience to track what do these spikes mean? Seems like they point to some specific problem.
GC and JVM are configured as: -XX:PermSize=384m -XX:MaxPermSize=512m -XX:+UseCompressedOops -XX:+UseFastAccessorMethods -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:-UseParallelOldGC -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=128 -XX:NewSize=4055m -XX:MaxNewSize=4055m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60 -XX:+UseCMSInitiatingOccupancyOnly -Xms12888m -Xmx12888m -Dsun.rmi.dgc.client.gcInterval=1800000 -Dsun.rmi.dgc.server.gcInterval=1800000
The graph is (Green is "mean", Blue is "Maximum"): Memory graph - 16:00 - 8:00 system without load, 8:00+ - system is under load
Until 8:00 there was no load at the system.
After 8:00 it's under load, but not huge one (~20 simultanious operations)