What are the best practices for monitoring and alerting for low level JVM metrics?

Solution 1:

I have used hprof before which bundled together with JRE. It does HEAP and CPU monitoring. I usually use it to monitor CPU usage and check which thread is taking majority of CPU. http://java.sun.com/developer/technicalArticles/Programming/HPROF.html

I also used JProbe before which is a commercial software. http://www.quest.com/jprobe/

Solution 2:

Ruxit is monitoring and presenting JVM metrics in an infographics style. It provides insights regarding: CPU, Memory, Traffic, Retransmissions, Connectivity, Suspension, JVM You can see screenshots here: Java Monitoring

Ruxit uses baselining to only alert you when it is necessary. I'm obviously a bit biased as I work for Ruxit. But the infographics style for visualizing the metrics are really great.