今天打开jvm本来想监控一下本机jvm应用的性能,突然发现一年前帮一个广告平台做性能优化的配置居然还能看到相关应用信息,该平台一天单表数据量大概500w左右,忙时上千万数据,采取mysql分库每天定期分表;
很多时候我们要对这种高并发的应用都要进行实时监控,一方面可以监控性能差的程序,另一方面及时发现程序运行异常信息;
使用jmx监控,jvm配置如下:
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=××××××××
-Dcom.sun.management.jmxremote.port=8000
-Dcom.sun.management.jmxremote.rmi.port=8000
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
使用jvirualvm配置连接应用后,我们在jvirualvm(免费)可以看到如下信息:
我们还可以看到操作系统相关信息:
线程执行的状态:
上图可以看到应用线程数量,可执行的大概情况。
如果要对java线程使用的方法监控,点击抽样器->cpu:
上图我们可以看到方法执行时间,当然我们还可以对方法里面的执行树进行查看,如上图点击CPU->快照,得到下图一,图二:
这里可以看到一个线程大概都执行了那些方法,并且可以得知那些方法执行得比较慢。可以很好的监控程序性能,和一些问题程序。
还可以jvm内存对象进行监控,类似jvm命令 jmap -histo:live pid,点击内存->快照,得到下图一
上图注意,可以对查询对象进行查询,上图查询com,该应用有大量活跃对象在运行。
以上就是jvirualvm的基本使用,其实jdk自带的工具挺多的,还有jconsole可以对mbean尽心查询并且修改,典型的,就是查看连接池配置,如druid,kafka,都可以通过jconsole查看配置,甚至修改配置。