aten java ikvm ATEN JAVA IKVM Viewer_aten java ikvm


简单回顾

上一节我们讲了JStack的详细使用,今天为大家讲了一个非常好用的可视化监控工具-JVisualVM。

JVisualVM

VisualVM是Netbeans的profile子项目,已在JDK6.0update7中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe)。

VisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。

从界面上看还是比较简洁的,左边是树形结构,自动显示当前本机所运行的Java程序,还可以添加远程的JavaVM,其中括号里面的PID指的是进程ID。OverView界面显示VM启动参数以及该VM对应的一些属性。Monitor界面则是监控Java堆大小,Permgen大小,Classes和线程数量。jdk不同版本中界面会不太一致,如有的含cpu监控,有的则不含(jdk1.6.0_10未包含)。

VisualVM使用简单,几乎0配置,功能还是比较丰富的,几乎囊括了其它JDK自带命令的所有功能:

内存信息。线程信息。Dump堆(本地进程)。Dump线程(本地进程)。打开堆Dump。堆Dump可以用jmap来生成。打开线程Dump。生成应用快照(包含内存信息、线程信息等等)。性能分析。CPU分析(各个方法调用时间,检查哪些方法耗时多),内存分析(各类对象占用的内存,检查哪些类占用内存多)。

监控本地与远程的Java进程

本地监控不需要配置,只要打开某个JAVA程序就会自动的加入到本地监控中。


aten java ikvm ATEN JAVA IKVM Viewer_java_02

界面


远程监控配置步骤:

1. 点击远程,添加目标进程机器ip2. 修改Tomcat的catalina.sh或catalina.bat 添加如下参数:JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.30.144  -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.authenticate=false -Djava.net.preferlIPv4Stack=true"3. 保存,重启Tomcat

有的小伙伴可能会问如何监控SpringBoot应用,如下:

1. vim /etc/profile2. 在/etc/profile最后一行增加export JAVA_OPTS='-Djava.rmi.server.hostname=192.168.30.144 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferlIPv4Stack=true'3. source /etc/profile使文件生效4. 启动 nohup java $JAVA_OPTS -jar performanceBetter.jar >/dev/null 2>&1 &


aten java ikvm ATEN JAVA IKVM Viewer_aten java ikvm_03

启动应用


Tomcat或者SpringBoot应用启动成功后,添加远程主机和JMX连接,都正常的话就可以使用了。


aten java ikvm ATEN JAVA IKVM Viewer_java比较时间大小_04


aten java ikvm ATEN JAVA IKVM Viewer_java visualvm远程监控_05


VisualVM 插件

VisualVM还可通过扩展增加功能,在“工具”-》“插件”-》可用插件项中列出。

最常用的就是Visual GC,它非常强大,可以动态的对指定的进程进行监控,并且来通过统计面板来分类显示出各项任务/事件的总时间开销。

重启Visual VM 之后,就可以看到这个"Visual GC"已经被正确的显示了。


aten java ikvm ATEN JAVA IKVM Viewer_java比较时间大小_06

VisualGC


总结

今天为大家带来了非常实用的工具JVisualVM的使用教程,下班准备去超市买粽子了,好久没吃馋了,哈哈。


aten java ikvm ATEN JAVA IKVM Viewer_java比较时间大小_07