VisualVM which comes with the JDK has some of these features (heap monitoring). You'll have to go with OS tools for CPU monitoring.
You can inject load using a number of tools, we found JMeter quite useful, by extending it with our own samplers to simulate load to specific components.
In order to get reports out of the system, you can monitor both JBoss and the OS with SNMP. We have also used MBeans to extract info such as # of threads and memory usage from the JBoss JVM and then generated trend graphs based on RRD from this.
last suggestion is possibly AOP interceptors - we looked at this a few years ago, and were able to determine metrics such as latency on our various application components, although I can't remember details of the implementation.
and JBoss Profiler