IDEA安装使用 VisualVM 及VisualVM 远程监视

2023-11-05

1. VisualVM是什么

按照VisualVM官网(http://visualvm.github.io/)上的介绍,VisualVM是一个集成命令行JDK工具和轻量级分析功能的可视化工具。专为开发和生产时间使用而设计。

我们在jdk安装包中也可以发现它

2. IDEA安装VisualVM插件

File-> Setting-> Plugins -> Browers Repositrories 搜索VisualVM Launcher安装并重启IDEA。

出现上图中的两个按钮即为安装成功,当我们通过他们启动项目时,会自动打开VisualVM控制台面板。

3. VisualVM本地使用

右侧有概述(Overview)、监视(Monitor)、线程(Threads)、抽样器(Sampler)几个标签,其中

  • 概述中可以看到程序的基本信息和启动参数、环境变量等等;
  • 监视是几个折线图,用于显示CPU、内存(分为Heap和Metaspace)、类和线程的使用情况或者数量,另外还包括执行垃圾回收和对堆 Dump的快捷功能;
  • 线程可详细查看每个线程的运行时间及状态等;
  • 抽样器可对CPU和内存进行一段时长的取样,从而对应用程序进行分析。

使用时,可通过监视中的各个折线图查看系统的变化,如果执行某段程序时,某个指标出现突然增大等问题,同时程序运行也出现问题,可进入到该面板做细致检查。

如果某段程序执行时CPU飙升或者内存溢出,此时排除系统性能原因,多半是由于低效的代码或者不合理的堆空间分配引起,可以在复现该问题的同时到抽样器面板进行抽样,从而确定应该优化哪个方法或者分配多大内存。

当对一个多线程应用程序进行调试或者开发后期做性能调优的时候,往往需要了解当前程序中所有线程的运行状态,是否有死锁、热锁等情况的发生,从而分析系统可能存在的问题。在 VisualVM 的监视标签和线程标签内,我们可以查看当前应用程序中所有活动线程(Live threads)和守护线程(Daemon threads)的数量等实时信息。

具体使用方法很直观,不再一一介绍,如果要进行测试,可参考该篇博客:http://www.cnblogs.com/wade-xu/p/4369094.html 

4. 远程监视

在实际工作中,需要在本机监控的生产环境下的jvm,Visualvm目前支持两种remote connection方式,分别是jstatd和JMX方式: 这里主要介绍的是通过JMX方式.。

4.1 修改远程jvm配置

进入JAVA_HOME\jre\lib\management\,拷贝一份jmxremote.password.template 并改名为 jmxremote.password到当前目录,并去掉# monitorRole  QED 和 # controlRole  R&D 这两行前面的注释符号。

 

[root@izbp1cq2wdg9kxunr0sz02z ~]# cd /usr/java/jdk/jdk1.8.0_172/jre/lib/management
[root@izbp1cq2wdg9kxunr0sz02z management]# cp jmxremote.password.template jmxremote.password
[root@izbp1cq2wdg9kxunr0sz02z management]# ls
jmxremote.access  jmxremote.password  jmxremote.password.template  management.properties  snmp.acl.template
[root@izbp1cq2wdg9kxunr0sz02z management]# vim jmxremote.password
[root@izbp1cq2wdg9kxunr0sz02z management]# chmod 600 jmxremote.password
[root@izbp1cq2wdg9kxunr0sz02z management]# chown root jmxremote.password

我这里使用的是默认的两个远程控制账号,如果在 jmxremote.password 中自定义了远程登录账号和密码,需要修改同目录下的jmxremote.access 文件,该文件可以控制访问权限。

4.2 修改远程机器上需要被监控的程序的配置文件 

我这里是监控Tomcat容器内部署的应用

修改TOMCAT_HOME/bin/catalian.sh文件,添加

export JAVA_OPTS="-Djava.rmi.server.hostname=47.xx.xxx.xx1 -Dcom.sun.management.jmxremote.port=18999  -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"

详细参数如下

 参数 描述
com.sun.management.jmxremote true / false. Default is true
com.sun.management.jmxremote.port Port number. No default.
com.sun.management.jmxremote.ssl true / false. Default is true.
com.sun.management.jmxremote.ssl.enabled.protocols Default SSL/TLS protocol version.
com.sun.management.jmxremote.ssl.enabled.cipher.suites Default SSL/TLS cipher suites.
com.sun.management.jmxremote.ssl.need.client.auth true / false. Default is false
com.sun.management.jmxremote.authenticate true / false.Default is true
com.sun.management.jmxremote.password.file JRE_HOME/lib/management/jmxremote.password
com.sun.management.jmxremote.access.file JRE_HOME/lib/management/jmxremote.access
com.sun.management.jmxremote.login.config Default login configuration is a file-based password authentication

重启tomcat。

可以用 netstat -anp| grep 18999 ,查看守护线程是否已经启动。

4.3 VisualVM配置

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IDEA安装使用 VisualVM 及VisualVM 远程监视 的相关文章

  • 如何自定义BlockingQueue的阻塞行为

    我想创建一个阻塞队列 它根据自定义规则而不是队列中的项目数量来阻止生产者 例如 生产者生成一些文件并放入队列中 消费者经过一番分析后将它们转移到特定位置 对于上述场景 如果队列中的总文件大小达到某个阈值 我希望生产者等待生成新文件 如果总大
  • Spring webflow 应用程序:HTTP 302 暂时移动

    我的 java 应用程序中的每个请求都会生成另外 2 个带有 HTTP 302 错误的请求 例如 如果请求查看名为板 html 这个请求是从首页 html 我收到按以下顺序生成的 3 个请求 POST home html 302 Moved
  • Java/JAXB:将具有相同名称但不同属性值的 XML 元素解组到不同的类成员

    我正在尝试根据其属性之一将具有多个 Fields 元素的 XML 解析为不同的类成员 这是 XML
  • 使用 Java 编程式 HTML 文档生成

    有谁知道如何在 Java 中以编程方式生成 HTMLDocument 对象 而不需要在外部生成字符串 然后使用 HTMLEditorKit read 来解析它 我问的两个原因 首先 我的 HTML 生成例程需要非常快 并且我认为将字符串解析
  • 使用 jdbc 程序连接到 Open Office odb 文件

    我编写了以下代码来连接到 OpenOffice db String db C Documents and Settings hkonakanchi Desktop Test odb Class forName org hsqldb jdbc
  • Maven + Cobertura:无法找到[您的班级]。你指定了源目录吗?

    我有 MyMath 类 有两个简单的方法 multi 和 add 和测试类只会测试多种方法 public class MainTest Test public void testMultiply MyMath tester new MyMa
  • 删除 servlet 中的 cookie 时出现问题

    我尝试使用以下代码删除 servlet 中的 cookie Cookie minIdCookie null for Cookie c req getCookies if c getName equals iPlanetDirectoryPr
  • 业务代表与服务定位器

    Business Delegate 和 Service Locator 之间有什么区别 两者都负责封装查找和创建机制 如果 Business Delegate 使用 Service Locator 来隐藏查找和创建机制 那么 Busines
  • 我们可以在三元运算符(Java)中使用命令吗?

    这是一个工作代码 String a first String b second String object System out println object null a b 但它不是 String a first String b se
  • 如何消除警告:使用“$”而不是“.”对于 Eclipse 中的内部类

    我是 Android 开发新手 当我将 eclipse 和 Android SDK 更新到最新版本后 我收到警告 Use instead of for inner classes or use only lowercase letters
  • 独占锁定ConcurrentHashMap

    我知道不可能锁定 ConcurrentHashMap 进行独占访问 但是 我找不到原因 是因为构成CHM的 Segment 没有被api公开吗 据推测 如果是的话 客户端代码可以执行 交接 锁定 Cheers 我知道不可能锁定 Concur
  • 在 Spring 中设置 WS https 调用超时 (HttpsUrlConnectionMessageSender)

    我正在尝试为 WS 调用设置超时 我延长了WebServiceGatewaySupport并尝试将发送者超时设置为如下 public Object marshalSendAndReceive Object requestPayload We
  • LibGdx 如何使用 OrthographicCamera 滚动?

    我已经找了 10 个小时 字面意思 我已经完成了 我需要问一下 事情是我正在学习如何使用 LibGdx 来编写 Java 游戏 我正在做一个水平太空飞船游戏 所以 我最糟糕的问题是我不知道如何滚动 我认为绘制会更好地解释 我想绘制一个巨大的
  • 如何自定义JProgressBar?

    我正在制作一个启动器 我想要一个自定义的进度栏 我已经做了一些研究 并且可以使用 JavaFX 从未用它做过任何事情 并且可以通过替换 UI 来实现 我正在寻找一个具有圆形边缘和圆形填充的酒吧 像这样的事情 package gui impo
  • java 属性文件作为枚举

    是否可以将属性文件转换为枚举 我有一个包含很多设置的属性文件 例如 equipment height equipment widht equipment depth and many more like this and not all a
  • 如何在将数据发送到 Firebase 数据库之前对其进行加密?

    我正在使用 Firebase 实时数据库制作聊天应用程序 我知道 Firebase 非常安全 只要您的规则正确 但我自己可以阅读使用我的应用程序的人的所有聊天记录 我想阻止这种情况 为此我需要一种解密和加密方法 我尝试使用凯撒解密 但失败了
  • 当容器大小更改时,JTable 仅调整选定列的大小

    对于面板内的 JTable 如果面板变大 我如何将额外的空间仅分配给某些列 在我的例子中 分配给最后一列 尽管提供 第 3 4 列和8 将获得额外的空间 我想允许用户手动更改所有列的列大小 我尝试了 table setAutoResizeM
  • 如何计算文件中单词的长度?爪哇

    我正在尝试编写一个代码来计算文件中特定长度的单词数 例如 How are you 会打印 Proportion of 3 letter words 100 3 words 我想计算长度为 1 2 3 4 5 6 7 8 9 10 11 12
  • Android 中的字符串加密

    我正在使用代码进行加密和加密 它没有给出字符串结果 字节数组未转换为字符串 我几乎尝试了所有方法将字节数组转换为字符 但没有给出结果 public class EncryptionTest extends Activity EditText
  • Java 9 中紧凑字符串和压缩字符串的区别

    有什么优点紧凑的字符串 http openjdk java net jeps 254JDK9 中的压缩字符串 压缩字符串 Java 6 和紧凑字符串 Java 9 都有相同的动机 字符串通常实际上是 Latin 1 因此浪费了一半的空间 和

随机推荐

  • 牛客练习赛69 C

    题意 给定 n n n点 m m m边 让你确定一个大小为 n n n的排列使得
  • Backtrader 基本使用教程 — 量化投资实战教程(1)

    都说Python可以用于量化投资 但是很多人都不知道该怎么做 甚至觉得是非常高深的知识 其实并非如此 任何人都可以在只有一点Python的基础上回测一个简单的策略 Backtrader是一个基于Python的自动化回溯测试框架 作者是德国人
  • CUDA samples系列 0.3 vectorAdd

    目录 CPU与GPU同步方法详解 源代码中的同步 同步方法扩展 代码解析 扩展一 vectorAdd nvrtc 扩展二 vectorAddDrv 这份代码非常的简单和基础 就把两个向量相加 CPU与GPU同步方法详解 源代码中的同步 代码
  • vue动态菜单及tag切换

    刚刚接触项目的小伙伴 几乎都接触不到这一块的 因为入职 公司要么有骨干 要么是现有项目维护 所以 对于动态菜单 很好奇 今天带着小伙伴们一起来看看吧 可能有些人接触过 只是看看别人写的代码 觉得都没有问题 没有实际动手去做过 这就应对了那句
  • mock与spy的区别

    mock与spy的区别 1 mock 1 1 mock对象的方法不执行具体逻辑 1 2 使用方法打桩返回给定数据 1 3 mock如何执行具体逻辑 2 spy 2 1 spy对象的方法执行具体逻辑 2 2 spy如何不执行具体逻辑 1 mo
  • java的运行环境是什么_Java运行环境是什么

    Java运行环境 JRE 是一个软件 由太阳微系统所研发 JRE可以让计算机系统运行Java应用程序 JRE的内部有一个Java虚拟机 JVM 以及一些标准的类别函数库 Java 运行环境 Java Runtime Environment
  • 时序预测

    时序预测 Python实现NARX带外源输入的非线性自回归神经网络时间序列预测 目录 时序预测 Python实现NARX带外源输入的非线性自回归神经网络时间序列预测 效果一览 基本介绍 程序设计 参考资料 效果一览 基本介绍 Python实
  • 解决Xampp中mysql无法启动的问题

    很突然的Xampp的mysql就打不开 很疑惑 之前一直可以打开的 然后刚才我启动了一下 就突然启动不了了 我想了一下 并没有出现端口号占用问题呀 而且报错也没有说端口号占用 报错写的很是通俗 然后我查看了日志文件 发现日志文件中也没有描述
  • 【无标题】chatgpt桌面化,桌面应用的安装

    前言 关于chatgpt最近来说可算是大火 不过在我使用过程中发现没事都要上openai的官网过于麻烦 而且卡顿 于是乎就在网上寻找一些方法 发现chatgpt可以桌面化 话不多说 直接上图 1 上github找这位大佬 2 主页往下番找到
  • 测试中BUG定义、测试BUG的等级划分、Bug流程以及Bug解决优先级

    一个优秀的软件测试师不仅仅能够发现软件中的bug 还能分析出bug产生的原因 总结了一些软件测试入门必须要了解和学习的BUG基础知识 主要包括BUG定义 测试BUG的等级划分 Bug流程以及Bug解决优先级等内容 下面一起来梳理一遍这些基础
  • ISE报错NgdBuild:604解决方法

    ISE报错NgdBuild 604解决方法 在使用ISE编写FPGA代码时 从其他地方导入 v文件 运行时会报图片中的错误 解决方法 在单纯的复制黏贴 v文件并且导入到 ISE 的同时 把 ngc文件拷贝过来 如下图所示 Rerun后即可解
  • python fastapi 向页面推送视频流,网站播放python获取的rtsp视频

    代码如下 import cv2 import uvicorn from fastapi import FastAPI Response from fastapi responses import StreamingResponse 创建一个
  • ubuntu安装软件一直0%

    ubuntu安装软件一直0 下载不了东西 更新版本库也不行 可能和dns解析错误有关系 可以修改 etc resolv conf文件 我填写的是北京联通的 请自行查阅自己的 nameserver 127 0 0 53 nameserver
  • 基于SpringBoot的CSGO赛事管理系统

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SpringBoot 前端 采用Vue技术开发 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Eclipse
  • win11安装gcc,g++,配置c++的编译环境

    MinGW Minimalist GNU for Windows download SourceForge net 下载并安装MinGW 可以直接鼠标点击操作 简单的很 选定gcc g 为待安装环境 然后开始安装就可以了 环境变量 右键计算
  • Java笔记-I/O流之比较器接口对象数组排序

    对象数组排序 内容介绍 1 对象数组直接调用sort 方法报错的原因 是因为没有定义比较的规则 需要自己定义 2 如何定义规则 看报错信息 ClassCastException demoCompare Person cannot be ca
  • 算法复杂度

    时间复杂度和空间复杂度 N 1个操作 O n O n O n O n N 2 1个操作 1 2 O n O n 2个单位的内存空间 O 1 常数的时间复杂度 两层循环O n 2 归并排序 T n 2 T n 2 n O n log n Ma
  • 10讲学会C语言之第四讲:循环结构

    文章目录 前言 一 求pi的近似值 二 统计整数的位数 三 判断素数 四 求阶乘和 五 循环结构编程 六 作业 前言 大家好 我是卷卷 本节课讲循环结构 for while和do while 主要包括六个部分 求pi的近似值 统计整数的位数
  • 1658 页的《Java 面试突击核心讲》在牛客网火了,完整版 PDF 开放下载!

    前言 我们都知道 在程序员的职业生涯中 有多个发展方向 不过就数据表明 近年来选择架构师方向的开发人员也越来越多 对于架构师的发展前途 我相信是已经没有争议的 但这个 概念 对于很多开发人员来说 并没有太清晰的认识 怎样才能成为架构师 是很
  • IDEA安装使用 VisualVM 及VisualVM 远程监视

    1 VisualVM是什么 按照VisualVM官网 http visualvm github io 上的介绍 VisualVM是一个集成命令行JDK工具和轻量级分析功能的可视化工具 专为开发和生产时间使用而设计 我们在jdk安装包中也可以