java jdk中的可视化性能监控工具visual vm是怎样的

发布时间:2021-09-27 17:50 来源:亿速云 阅读:0 作者:柒染 栏目: 开发技术

今天就跟大家聊聊有关java jdk中的可视化性能监控工具visual vm是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

visual vm 是一个功能强大的多合一故障诊断和性能监控可视化工具,使用 visual vm 可以替代 jstatjmapjhatjstack等。尽管如此,考虑到生产项目绝大多数发布在linux,不支持gui界面,因此无法直接使用visual vm,所以生产上还是使用jstatjmapjhatjstack等工具居多。

1. 安装

jdk7jdk8 版本,可直接在命令行使用jvisualvm命令启动visual vm. 从jdk 9开始, visual VM不再集成在Oracle JDK中, 需要单独下载安装, 下载地址。安装完成后需要配置环境变量,这样之后就可以从命令行启动了。

visual vm 支持插件安装,通过菜单栏Tools -> Plugins 打开插件安装界面:

推荐安装visual gc,可以方便地看到eden区、suvivor区、老年代、meatspace区等区域内存空间占用及回收情况。

2. 连接应用程序

visual vm 可以连接本地java应用程序,也可以连接远程java应用。

2.1 本地连接

开启visual vm后,左侧面板local节点下就会列出本机上所有的java线程,双击对应的节点,即可连接。

2.2 远程连接

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 项目
  1. 启动项目

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开放的端口。

  1. 使用visualvm 连接 在visual vm的菜单栏,通过 File -> Add JMX Connection... 打开jmx连接面板

Connection栏中的192.168.0.104:8888对应的就是启动参数中的-Djava.rmi.server.hostname-Dcom.sun.management.jmxremote.port 的值。

连接成功的界面如下:

再来一张本地直接连接的示例:

相比于本地直接连接,远程jmx连接少了MinitorthreadsSamplerProfiler等几个功能,另外Visual GC 也无法在远程连接时使用:

3. 监控应用程序概况

通过visual vm,可以查看程序的基本概况,比如进程id, Main Class, 启动参数等。

单击Tab页面上的监控页面,即可监控应用程序的cpu、堆、永久区、类加载和线程的总体情况。通过页面上的“执行垃圾回收”和“堆dump”按钮还可以手工执行FullGC和生成堆快照。

4. Thread Dump和分析

visual vm的线程页面可以提供详细的线程信息,单击右上角的“线程dump”按钮,可以导出当前所有线程的堆栈信息(相当于jstack命令)。

5. 性能分析

visual vm 有两个采样器,在sample页面显示了cpu和内存两个性能采样器,用于实时监控应用程序信息。cpu采样器可以将cpu占用时间定位到方法,内存采样器可以查看当前程序的堆信息。

通过visual vm的采样功能,可以找到该程序中占用cpu时间最长的方法,如图所示,

visual vm 的默认统计信息中,并不包含jdk的内置对象的函数调用统计,比如 java.* 包中的类。如果需要统计jdk内的方法调用情况,需要单击右上角的“设置”选项,手工进行配置。

通过内存采样器,可以实时查看系统中的实例分布情况:

6. 内存快照分析

使用右键菜单中的堆dump,可以立即获得当前应用程序的内存快照,如图所示:

内存快照如图所求,在顶部的下拉框中,提示了4个基本功能页:概要、对象、线程和OQL控制台。

  1. 概要页面展示了当前内存的整体信息,包括内存大小、实例总数、类总数等。

  1. 对象页面,以类为索引,显示了每个类的实例数和占用空间。

  1. 在线程页面,展示了当前应用dump时的线程堆栈情况。

  1. OQL控制台提供了更强大的对象查询功能。

免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系QQ:712375056 进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。