The CMS collector, which you have turned on, needs lots of memory. If the CMS collector ever gets behind in cleaning the tenured generation of the heap, a very expensive "stop the world" collection takes place. I once forced the CMS collector to get behind on a particular app and the garbage collection took around 5 minutes (using the standard collector a Full GC on that same app takes about 2 seconds).
Also, do you have only one CPU? Never use the CMS collector when you have only a single CPU.
Of course, without gathering any GC data, it is all speculation. What data have you gathered so far?
I have CPU with two cores - is it enough?
I have to turn on logging of GC data.
2 cores is adequate, but you have to realize that while the GC is running only one of the cores will be available for the app to use.
For monitoring GC, see my presentation at http://www.cecmg.de/doc/tagung_2007/agenda07/24-mai/2b3-peter-johnson/index.html