今天就跟大家聊聊有关java jdk中的可视化性能监控工具visual vm是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
visual vm
是一个功能强大的多合一故障诊断和性能监控可视化工具,使用 visual vm
可以替代 jstat
、jmap
、jhat
、jstack
等。尽管如此,考虑到生产项目绝大多数发布在linux服务器,不支持gui界面,因此无法直接使用visual vm
,所以生产上还是使用jstat
、jmap
、jhat
、jstack
等工具居多。
jdk7
及 jdk8
版本,可直接在命令行使用jvisualvm
命令启动visual vm
. 从jdk 9开始, visual VM
不再集成在Oracle JDK
中, 需要单独下载安装, 下载地址。安装完成后需要配置环境变量,这样之后就可以从命令行启动了。
visual vm
支持插件安装,通过菜单栏Tools
-> Plugins
打开插件安装界面:
推荐安装visual gc
,可以方便地看到eden区、suvivor区、老年代、meatspace区等区域内存空间占用及回收情况。
visual vm
可以连接本地java应用程序,也可以连接远程java应用。
开启visual vm
后,左侧面板local
节点下就会列出本机上所有的java线程,双击对应的节点,即可连接。
visaul vm
也支持远程jmx连接,java应用程序可以通过以下参数打开jmx端口:
-Djava.rmi.server.hostname=127.0.0.1 \ -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=8888 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false"
admin.jar
项目启动项目
java -jar -Djava.rmi.server.hostname=192.168.0.104 \ -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=8888 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ admin.jar
-Djava.rmi.server.hostname
对应的是要远程访问的服务器ip,如果你的远程服务器ip是10.1.23.4,那么-Djava.rmi.server.hostname
对应的值就为10.1.23.4。
-Dcom.sun.management.jmxremote.port
指定远程服务器jmx
开放的端口。
使用visualvm
连接 在visual vm
的菜单栏,通过 File
-> Add JMX Connection...
打开jmx
连接面板
Connection栏中的192.168.0.104:8888
对应的就是启动参数中的-Djava.rmi.server.hostname
与 -Dcom.sun.management.jmxremote.port
的值。
连接成功的界面如下:
再来一张本地直接连接的示例:
相比于本地直接连接,远程jmx连接少了Minitor
、threads
、Sampler
、Profiler
等几个功能,另外Visual GC
也无法在远程连接时使用:
通过visual vm
,可以查看程序的基本概况,比如进程id, Main Class, 启动参数等。
单击Tab页面上的监控页面,即可监控应用程序的cpu、堆、永久区、类加载和线程的总体情况。通过页面上的“执行垃圾回收”和“堆dump”按钮还可以手工执行FullGC和生成堆快照。
visual vm
的线程页面可以提供详细的线程信息,单击右上角的“线程dump”按钮,可以导出当前所有线程的堆栈信息(相当于jstack
命令)。
visual vm
有两个采样器,在sample页面显示了cpu和内存两个性能采样器,用于实时监控应用程序信息。cpu采样器可以将cpu占用时间定位到方法,内存采样器可以查看当前程序的堆信息。
通过visual vm
的采样功能,可以找到该程序中占用cpu时间最长的方法,如图所示,
在visual vm
的默认统计信息中,并不包含jdk的内置对象的函数调用统计,比如 java.*
包中的类。如果需要统计jdk内的方法调用情况,需要单击右上角的“设置”选项,手工进行配置。
通过内存采样器,可以实时查看系统中的实例分布情况:
使用右键菜单中的堆dump
,可以立即获得当前应用程序的内存快照,如图所示:
内存快照如图所求,在顶部的下拉框中,提示了4个基本功能页:概要、对象、线程和OQL控制台。
概要页面展示了当前内存的整体信息,包括内存大小、实例总数、类总数等。
对象页面,以类为索引,显示了每个类的实例数和占用空间。
在线程页面,展示了当前应用dump时的线程堆栈情况。
OQL控制台提供了更强大的对象查询功能。
看完上述内容,你们对java jdk中的可视化性能监控工具visual vm是怎样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。