首页 > 编程语言 >Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化

时间:2022-10-13 20:32:50浏览次数:80  
标签:management Java sun 虚拟机 Dcom 线程 监控 ------ jmxremote

  上篇博客我们介绍了​​虚拟机监控和分析命令行工具​​,由于其不够直观,不是很容易排查问题,那么本篇博客我们就来介绍几个可视化工具。

1、JConsole

  JConsole(Java Monitoring and Management Console)是一款基于 JMX 的可视化监视和管理的工具。它管理部分的功能是针对 JMX MBean 进行管理,MBean 可以使用代码、中间件服务器的管理控制台或者所有符合 JMX 规范的软件进行访问。

  JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架,一套标准的代理和服务;MBean就是一种规范的JavaBean,通过集成和实现一套标准的Bean接口。

①、启动 JConsole

  这是我们JDK自带的监控工具,在JDK的安装目录bin下即可找到。

  如果配置过JDK环境变量,在CMD命令提示符中输入 jconsole 也可直接打开。

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_远程连接

  这是一个可执行文件,直接双击即可打开。打开如下:

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_远程连接_02

②、监控界面介绍

  JConsole 这个监控工具可以监控本地进程以及远程进程,我们这里以监控本地进程为例,来介绍具体的监控界面。

  点击本地进程下面的任意一栏,进入到监控界面。

  1、监控概览

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_java_03

  这个界面是我们建立本地连接后,进入的第一个页面。显示的是整个虚拟机主要运行数据的概览,包括“堆使用情况”、“线程”、“类”、“CPU占用率”等四项信息的曲线图,这些曲线图是后面“内存”、“线程”、“类”页签的信息汇总,下面会分别介绍这几个页签。

  2、内存监控

  这个页签相当于上一篇博客介绍的jstat命令,不过这里是可视化的。用于监视虚拟机内存的一些变化趋势。

  监视区域如下:

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_远程连接_04

  3、线程监控

  这个页签相当于上篇博客介绍的可视化的jstat 命令。遇到线程停顿的时候可以使用这个页签进行监控分析。

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_tomcat_05

  另外,此页面左下角还有一个检测死锁的按钮,出现线程死锁后,点击此按钮,便会出现一个新的死锁页签。

  比如,对于如下这段死锁代码:

1     @GetMapping("/test2")
2 public void test2() throws Exception{
3 Object lock1 = new Object();
4 Object lock2 = new Object();
5
6 new Thread(()->{
7 synchronized (lock1){
8 try {
9 Thread.sleep(1000);
10 } catch (InterruptedException e) {
11 e.printStackTrace();
12 }
13 synchronized (lock2){
14 System.out.println("线程1结束运行");
15 }
16 }
17 }).start();
18
19 new Thread(()->{
20 synchronized (lock2){
21 try {
22 Thread.sleep(1000);
23 } catch (InterruptedException e) {
24 e.printStackTrace();
25 }
26 synchronized (lock1){
27 System.out.println("线程2结束运行");
28 }
29 }
30 }).start();
31 }

  这里创建了两把锁,lock1,lock2,创建了两个线程,线程1获取到lock1后,说你给我lock2,我就释放lock1;而线程2获取到lock2后,说你给我lock1,我就释放lock2。两个线程谁也不释放,于是便造成了死锁现象。

  通过监控工具便可以检测到,如下:

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_tomcat_06

  4、类监控

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_java_07

  5、VM概要

  展示一些JVM信息。

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_tomcat_08

③、配置Tomcat远程监控

   其实使用监控工具,我们很少对本地的程序进行监控,大多数情况都是对部署在远程Linux服务器上的程序进行监控,那么想要使用 JConsole这款工具进行远程监控,我们必须要进行一些配置。我们首先介绍对Tomcat的远程监控。

  1、配置catalina.sh

  在该文件下加入如下配置信息:

JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.146.200 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

  -Dcom.sun.management.jmxremote 表示开启远程连接。

  -Dcom.sun.management.jmxremote.port=9004 表示设置远程连接端口为1099

  -Dcom.sun.management.jmxremote.authenticate=false 表示不需要密码验证

  -Dcom.sun.management.jmxremote.ssl=fals 表示不需要开启ssl连接

  -Djava.net.preferIPv4Stack=true 表示只支持IPV4地址

  -Djava.rmi.server.hostname=192.168.146.200 表示监控的主机名为192.168.146.200

  添加位置如下:

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_tomcat_09

 

  2、建立连接

  通过上面的配置,启动Tomcat后,我们只需要在 JConsole 的远程连接界面,输入 192.168.146.200:9004 ,然后点击连接即可。

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_远程连接_10

  3、连接错误情况

  如果无法连接,需要依次检测如下信息:

  ①、配置的端口不能被占用,可以通过 netstat -tunlp|grep 1099 命令验证。

  ②、防火墙开启对上面设置端口的信任

  ③、通过 hostname -i 命令,如果打印的不是前面设置的ip地址,则需要通过 vim /etc/hosts 命令,将127.0.0.1 修改为本机IP地址。

④、配置远程jar包监控

  启动jar包的命令如下:

nohup java -Djava.rmi.server.hostname=192.168.146.200 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1089 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar jvm-0.0.1-SNAPSHOT.jar &

  配置端口,ip地址,和远程监控Tomcat大体上是一样的,然后建立连接即可。

 2、JVisualVM

  英文介绍为 All-in-One Java Troubleshooting Tool。听名字我们就知道这是一块功能很全,很强大的Java运行监视和故障处理工具,并且是官方主力发展的虚拟机故障处理工具,其性能分析比很多专业收费软件都不会逊色多少。

①、启动 JVisualVM

  和前面介绍的JConsole工具一样,这也是 JDK 自带的一个工具,在安装目录bin下,可以直接双击启动。

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_tomcat_11

  打开界面如下:

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_远程连接_12

②、监控界面介绍

  其实大体界面和JConsole差不多。

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_远程连接_13

  抽样器可以对CPU,内存进行详细监控统计。

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_tomcat_14

③、插件机制

  JVisualVM 比较强大的地方在与可以安装各种插件,提供各种不同的功能。

  点击上方菜单栏 工具---》插件:

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_java_15

  然后设置插件中心的地址:

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_tomcat_16

  这个地址,我们可以到这个网址上去获取:

  ​​https://visualvm.github.io/pluginscenters.html​

  选择对应的插件地址时,要根据我们的JDK版本来选定。

  比如,我这边的JDK版本如下:

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_tomcat_17

  那么选择的地址如下(152,介于131-221之间):

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_java_18

  设置好下载地址后,我们这边选择需要的插件,点击安装即可!比如比较常用的插件 Visual GC(用来查看GC日志)

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_远程连接_19

   安装完成之后,我们便可以在页签上看到这个新增的插件。

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化_远程连接_20

④、配置远程连接

  不管是远程连接Tomcat还是jar包,都和介绍JConsole一模一样,详情请参考上面的配置。

⑤、使用文档

  对于JVisualvm,官方有详细的中文文档说明,如下:

  ​​https://visualvm.github.io/documentation.html​

  

标签:management,Java,sun,虚拟机,Dcom,线程,监控,------,jmxremote
From: https://blog.51cto.com/u_12749768/5751615

相关文章

  • PostgreSQL的WAL日志管理
    wal日志介绍wal日志即writeaheadlog预写式日志,简称wal日志。wal日志可以说是PostgreSQL中十分重要的部分,相当于oracle中的redo日志。当数据库中数据发生变更时:(1)change发生......
  • Spark Troubleshooting
    1、故障排除一:控制reduce端缓冲大小以避免OOM在Shuffle过程,reduce端task并不是等到map端task将其数据全部写入磁盘后再去拉取,而是map端写一点数据,reduce端task就会拉取一小......
  • C++ 捕获程序异常奔溃minidump
    1、简介并不是所有的bug都可以在发布前找到,也就是说并不是所有的抛出异常的bug都可以在发布前找到。幸运的是,微软在PlatformSDK中包含了一个功能,可以帮助开发人员收集用......
  • C++ 使用栈求解中缀、后缀表达式的值
    1.前言表达式求值对于有知识积累的你而言,可以通过认知,按运算符的优先级进行先后运算。但对计算机而言,表达式仅是一串普通的信息而已,需要通过编码的方式告诉计算机运算法......
  • Java基础(四)| 数组及内存分配详解
    ⭐本专栏旨在对JAVA的基础语法及知识点进行全面且详细的讲解,完成从0到1的java学习,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握JAVA编程,同时为后续的框架学习,进阶开......
  • HashSet源码全方位解读
    ......
  • Python 深度学习目标检测评价指标
    目标检测评价指标:准确率(Accuracy),混淆矩阵(ConfusionMatrix),精确率(Precision),召回率(Recall),平均正确率(AP),meanAveragePrecision(mAP),交除并(IoU),ROC+AUC,非极大值抑制(NMS)。假......
  • 知识图谱-生物信息学-医学顶刊论文(Bioinformatics-2021)-MUFFIN:用于DTI预测的多尺度
    2.(2021.3.15)Bioinformatics-MUFFIN:用于DTI预测的多尺度特征融合论文标题:MUFFIN:multi-scalefeaturefusionfordrug–druginteractionprediction论文地址:htt......
  • 55. 跳跃游戏
    给定一个非负整数数组 nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。 示例 1:输入:nu......
  • [BUUCTF]Pwn刷题记录
    本部分内容长期更新,不再创建新文章影响阅读rip根据IDA加载入main函数声明发现s数组距离rbp的距离为F,即为15,这里的运行环境是64位,所以应当将Caller'srbp的数据填满,在这里......