jvm监控的必要性
如果遇到jvm问题,我们一般考虑查看jstat,jconsole查看基本信息,例如jvm各个空间的使用比率,还要gc次数,gc时间等等。在排除错误的时候,我们也发现jstat开启的时候,一般会后面加个定时打印的时间,先观察一段时间。不同时间的数据需要做对比。不对比的话,根本不知道整个jvm运行的情况,例如gc次数是什么频率的增长,gc的时间是什么情况。所以我们需要一个方案把数据可视化。这样才能很好的分析问题。
常见方案
jconsole
如果特别短期的话,我们就使用jconsole。里面有一段时间的展示结果,但是数据不会保存很久。适合问题特别明显的时候。
apm
apm监控更为专业,不单单是jvm的,会有物理机的信息,调用栈,以及异常等等。相对数据很全面,商业的有oneapm,听云等等。开源的有pinpoint,skywalking等。由于是完整的一套监控方案,所以一般都比较重,依赖的存储往往是hbase,es等。其实主要是一个长期的分析。
prometheus
prometheus本身其实是监控存储的一套方案,大家可以把数据存储到prometheus,而且他无缝衔接k8s。由于他是时序数据库,所以存储的数据是有限的,只有metric的数据,并没有方法去存储堆栈等等。也因此,他的搭建其实最方便,一般用用存个几天的数据做做监控,他是特别快速的方案。
jmx exporter
现在已经有开源的方案采集jmx的指标到prometheus。
这个方案是一个javaagent的实现