Visual VM is quite a useful profiling tool that comes with the jdk (6.0 and above). You just fire it up from the command line (type 'jvisualvm', assuming you have included jdk in your classpath) and deploy your server or application. Double click your server process from the Application window and click the profiler tab. Enable settings to configure which java package to profile.
Thereafter, head over to the CPU tab. Now you are free to interact with your server or application and Visual VM will collect all the relevant data as a visual graph (e.g., identifying bottlenecks, method execution times, etc). This is clearly preferable to using System.nanoTime() calls to monitor method execution times.