jvisualvm保姆级教程

本文介绍了VisualVM这款Java应用性能分析工具,包括其用途、官网下载、安装gc插件以监控本地项目,以及如何通过JMX和jstatd远程监控Java应用。此外,还涵盖了启动参数、性能影响和安全性的注意事项。
摘要由CSDN通过智能技术生成

背景

在有时候我们需要分析java应用的一些内存、gc等情况进行性能分析。我们往往需要一些性能分析利器,而VisualVM算是其中一个,今天我们来学习他的使用以及如何性能分析java应用

步骤

VisualVM是什么

VisualVM 是一款集成了 JDK 命令行工具和轻量级剖析功能的可视化工具。 设计用于开发和生产。

官网

https://visualvm.github.io/

下载

(jdk1.8及之前的放在jdk的bin目录下,11以后需要自己去官网下载!!!,如果你要观测的linux上的jdk是11及以上,请您自己去官网下载,否则就算能连上也会出现很多问题)
https://visualvm.github.io/download.html
在这里插入图片描述

安装gc插件

为了我们方便我们观察gc的一些监控指标,我们安装一个gc插件
在这里插入图片描述

监控本地java项目

在这里插入图片描述

我们看看有哪些监控指标

监控器
在这里插入图片描述

抽样器
在这里插入图片描述

远程java应用监控

(!!!!一定要记得开放端口号,注意防火墙哦,jstatd 的端口要求比较多)

大多时候我们需要监控的是线上的java应用,进行排查问题。所以了远程接入点
在这里插入图片描述

远程接入方式有两种

JMX(Java Management Extensions)和jstatd都是用于监控Java虚拟机(JVM)的工具,但它们在实现方式、功能特性和使用场景上存在一些显著的区别。

JMX是一个为应用程序、设备、系统等植入管理功能的框架。它提供了丰富的API和工具,允许开发人员和运维人员轻松地监控和管理JVM的状态和资源使用情况。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,因此具有很高的灵活性和可扩展性。JMX的主要优势在于其强大的功能和良好的扩展性,能够满足各种复杂的监控需求。

相比之下,jstatd是一个RMI(Remote Method Invocation)服务器程序,主要用于监控本地所有JVM从创建开始直到销毁整个过程中的资源使用情况。jstatd提供了一个接口,使得监控工具(如VisualVM)能够远程连接到本机的JVM并获取相关信息。jstatd的主要特点是简单易用,只需在主机上运行一个jstatd进程,就可以监控该主机上的所有Java应用程序。然而,由于jstatd是通过RMI进行通信的,因此在某些情况下可能会受到网络防火墙或安全策略的限制。

总结来说,JMX和jstatd在监控Java虚拟机方面各有优势。JMX功能强大且灵活,适用于复杂的监控场景;而jstatd简单易用,适用于快速部署和监控的场景。在选择使用哪个工具时,需要根据具体的监控需求和环境进行权衡。

JMX

这种方式的必须在应用启动的时候添加启动参数提供远程连接

java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=8777 \
-Dcom.sun.management.jmxremote.local.only=true \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.rmi.port=8777 \
-Djava.rmi.server.hostname=192.168.60.227   -jar  ele-admin-api-1.5.0.jar&

这样就可以通过远程ip+8777端口进行连接了(这个端口号可以任意指定,不冲突就好)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
有的时候可能会反应慢些
效果如下,是不是你想要的。
在这里插入图片描述

jstatd

1、找到java安装home路径

echo $JAVA_HOME

2、在服务器{JAVA_HOME}/bin目录建立文件:jstatd.all.policy(名字随便,符合*.policy即可), 文件内容为:
vim jstatd.all.policy

grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};

如果jdk版本大于1.8,文件内容为

grant codebase "jrt:/jdk.jstatd" {
   permission java.security.AllPermission;
};

grant codebase "jrt:/jdk.internal.jvmstat" {
   permission java.security.AllPermission;
};

3、启动jstatd

nohup    jstatd -J-Djava.rmi.server.hostname=192.168.60.227 -J-Djava.security.policy=/home/admin/jstatd.all.policy -p 1099

(这里的ip是linux主机的ip,也是就是被检测方的ip,这里的1099也是可以更换的,不要和其他端口号冲突就好,但是后边windows主机进行连接的时候和这个端口号要一致)

4、查看jstatd端口

netstat -luntp|grep jstatd

这里会出现两个端口,一个默认的1099,还有一个随机端口。 如果是机器有限制,需要向运维身申请开通这两个端口的权限

5、连接
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
也可以观察到我们想要的东西。

总结

这其中还有很多点解释得不够底层,后续我会继续补充,如为什么有两种方式,优势利弊都是什么,还有每一步的操作都代表了什么,版本之间的关系如何,这些问题我们都要心知肚明。

我们需要注意:

启动和配置:Java VisualVM通常位于JDK安装目录的bin目录下。在启动后,它会在左侧栏目列出所有运行中的Java进程。确保你选择了正确的进程进行监控。
插件管理:Java VisualVM支持丰富的插件来增强其功能。你可以通过菜单栏的“工具”->“插件”来查看和管理已安装的插件。确保你安装了需要的插件,并根据需要更新或卸载插件。
内存和堆分析:使用Java VisualVM进行内存和堆分析时,要特别注意数据的解读。堆Dump功能可以将内存中的对象信息持久化保存,这有助于查看对象的状态和关系。但是,理解这些数据需要一定的Java内存管理知识。
远程调试:Java VisualVM支持远程调试功能,这需要在服务器端进行特定的配置。配置时,需要注意设置正确的hostname、端口和认证方式。同时,也要确保服务器的防火墙和安全策略允许远程调试连接。
性能影响:虽然Java VisualVM是一个强大的监控工具,但它本身也会消耗一定的系统资源。在监控过程中,要注意其对应用程序性能的可能影响,避免过度监控导致性能下降。
安全性:在使用Java VisualVM进行监控时,要注意保护敏感信息的安全性。确保只有授权的用户可以访问和使用Java VisualVM,并避免在公共网络或不受信任的环境中使用。

  • 15
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Circ.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值