Often I see a behaviour that after reaching a threshold in memory consumption the GC become more active, this force more parallel access (because of longer duration) and this will end in more GC to handle the small rest of memory :(
So what you might check
- is the overall memory use increased => you will have a leak
you might use jstat to monitor the JBoss JVM it will be not a big overhead and its possible in production
- you might have a traffic peak that end in such behaviour => check whether more memory or clustering helps
also jstat will help
Also you should activate the GC logging (see link gc-tuning from Rado above):
-verbose:gc -Xloggc:/tmp/jboss_gc.log -XX:+PrintGCDetails ...
The interesting log is 'Total Time where application stop' see Java GC tuning
In your case I suppose a that ~1% app time and 99% of such stop time, this mean the GC must work hard to provide memory for allocation :(