jvisualvm保姆级教程

news2024/10/5 18:30:15

这里写目录标题

  • 背景
  • 步骤
    • VisualVM是什么
    • 官网
    • 下载
    • 安装gc插件
    • 监控本地java项目
    • 我们看看有哪些监控指标
  • 远程java应用监控
      • JMX
      • jstatd
  • 总结

背景

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

步骤

VisualVM是什么

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

官网

https://visualvm.github.io/

下载

(jdk1.8及之前的放在jdk的bin目录下,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,并避免在公共网络或不受信任的环境中使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1510369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# 用Trace.WriteLine输出调试信息无法查看

写程序就会遇见BUG,这时候在代码不同部位输出一些标记的信息对查找错误非常有必要,一般情况下我们都是使用Console.WriteLine()方法来打印信息到控制台窗口,但有时候使用Console.WriteLine()方法会存在不方便的情况,比如鄙人遇到的…

javaEE8(数据库编程课后习题1,2)

一&#xff1a; 二&#xff1a; 数据库内信息&#xff1a; 登录&#xff1a; 注册&#xff1a; Register.jsp <% page pageEncoding"UTF-8" import"java.sql.*"%> <!DOCTYPE html> <html lang"en"> <head> <…

微信支付商户号如何开通 0.2% 提现费率?

微信支付商户号如何开通 0.2% 提现费率&#xff1f; 先说结论&#xff1a;本地面对面收款0.2%有可能&#xff0c;但线上不可能0.2%&#xff01;因为没利润&#xff01; 天下没有免费的午餐&#xff0c;所以不要被骗了。 支付宝和微信商户的费率除了少数公共事业&#xff08;…

php集成修改数据库的字段

1.界面效果 2.代码 <?phpecho <form action"" method"post"><label for"table">表名:</label><input type"text" id"table" name"table"><br><div id"fieldsContaine…

算法——哈希王

242.有效的字母异位词 力扣题目链接(opens new window) 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true 示例 2: 输入: s "rat", t "car&qu…

基于若依的ruoyi-nbcio流程管理系统自定义业务流程出现多个时相应的流程选择问题(一)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

基于PLC全自动药品包装机系统的设计5.26

摘 要 在科技迅猛发展的今天&#xff0c;人民生活水平也在逐步上升的同时&#xff0c;我们国家的医药包装行业却停滞不前&#xff0c;仍停留在使用继电器控制系统生产产品&#xff0c;然而这种控制系统却有着不可靠&#xff0c;线路极其复杂&#xff0c;出现故障问题难以解决的…

接口日志:储存到MySQL数据库

1、定义一个日志注解&#xff0c;把模块的接口调用日志储存到数据库中。 2、后续可能会产生性能问题&#xff0c;但对于当前快速扩张的业务而言&#xff0c;这种过渡性的功能&#xff0c;还是可以接受的。 用法&#xff1a; 一、自定义注解对象 package com.pkg.modelname.ann…

罐头鱼AI短视频矩阵营销|视频批量剪辑|矩阵系统

AI批量视频剪辑系统是一款功能丰富的视频编辑软件&#xff0c;提供了以下主要功能&#xff1a; 首页显示&#xff1a;在首页上显示用户的登录状态、已绑定的账号数量以及最近上传的视频素材和新上传素材列表。 抖音账号绑定功能&#xff1a;用户可以绑定抖音账号&#xff0c;Q…

【Python】新手入门学习:什么是硬编码?如何避免硬编码?

【Python】新手入门学习&#xff1a;什么是硬编码&#xff1f;如何避免硬编码&#xff1f; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教…

在ubuntu上安装FastSufer【本机安装】

亲测:FastSurfer分割并重建一个大脑需要1个小时,而freeSurfer需要8个小时。确实很快! 这里我在网页端搭建了一个小的工具包,里面集成了经典的freeSurfer和较快的FastSurfer。如果你不想安装或者手头没有linux设备,您也可以直接从以下网址直接使用,跳过繁琐的安装步骤!!…

基于PLC的智能楼宇控制系统设计

目录 摘要 2 第一章 绪论 5 1.1 引言 5 1.2 智能楼宇的课题背景 5 1.3 智能楼宇的功能和优势 6 第二章 智能楼宇系统总体方案确定 7 2.1 智能楼宇系统总体方案的设计 7 2.1.1 智能楼宇概述 7 2.1.2 智能楼宇的分类 7 1、建筑设备自动化系统(BA) 7 2、通讯自动化系统&#xff0…

融资项目——网关微服务

1. 网关的路由转发功能 在前后端分离的项目中&#xff0c;网关服务可以将前端的相关请求转发到相应的后端微服务中。 2. 网关微服务的配置 首先需要创建一个网关微服务&#xff0c;并添加依赖。 <!-- 网关 --><dependency><groupId>org.springframework.cl…

更深层的去理解负载均衡

目录 前言&#xff1a; 一、进行负载均衡的原因 二、什么是负载均衡 三、负载均衡的分类 二层负载均衡 三层负载均衡 四层负载均衡 七层负载均衡 四、负载均衡工具 LVS &#xff1a;LVS主要用来做四层负载均衡 Nginx &#xff1a;Nginx主要用来做七层负载均衡 HAProxy &#xf…

推荐5款知道的人不多的小众软件

​ 今天推荐5款十分小众的软件&#xff0c;知道的人不多&#xff0c;但是每个都是非常非常好用的&#xff0c;有兴趣的小伙伴可以自行搜索下载。 1. 3D建模与设计——Fusion360 ​ Fusion360是一款强大的3D建模与设计软件&#xff0c;集CAD、CAM和CAE功能于一体。它支持从概念…

【Greenhills】MULTI IDE工程管理的目录结构

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 关于的GHS的Project Manager中工程的目录结构的组成 2、 问题场景 在GHS中去创建项目后&#xff0c;对于在Project Manager窗口中的目录结构不太清晰&#xff0c;目录中有多个gpj文件&#xff0c;无法确认哪个是…

制冷系统管道焊接气焊安全操作

气焊操作安全教育&#xff1a; 1、检查气焊用具完好牢固无损&#xff0c;不得贴粘有&#xff08;机油&#xff09;&#xff1b; 2、气瓶余压&#xff08;2KG&#xff09;停止使用&#xff1b;清除动火 10 米范围内易燃易爆物料&#xff1b; 3、库房内动火要 做好通风排气&…

时间序列处理相关函数及案例

目录 常用函数日期对象ee.Date.fromYMD&#xff08;&#xff09;ee.List.sequence&#xff08;&#xff09; 序列影像处理ee.ImageCollection.fromImages&#xff08;&#xff09;ee.Filter.calendarRange&#xff08;&#xff09;.set&#xff08;&#xff09; 案例&#xff1…

15.0 Scrapy 使用中出现的错误分享

目录 一、把 Scrapy项目创建在一个 python 项目中 1、导致情况及解决方法(简述) 2、导致情况及解决方法(详述) 2.1 导致引入模块时找不到 2.2 后续 scrapy crawl 命令报错 一、把 Scrapy项目创建在一个 python 项目中 1、导致情况及解决方法(简述) &#xff08;1&#x…

Linux 多线程开发

第三章 Linux 多线程开发 3.1 线程3.1.2 线程操作3.1.2 线程属性 3.2 线程同步3.2.1 互斥量/锁3.2.2 死锁3.2.3 读写锁 3.3 生产者消费者模型3.3.1 条件变量3.3.2 信号量/灯 网络编程系列文章&#xff1a; 第1章 Linux系统编程入门&#xff08;上&#xff09; 第1章 Linux系统…