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

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 也可直接打开。

  

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

  

②、监控界面介绍

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

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

  1、监控概览

  

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

  2、内存监控

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

  监视区域如下:

  

  3、线程监控

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

  

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

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

     @GetMapping("/test2")
public void test2() throws Exception{
Object lock1 = new Object();
Object lock2 = new Object(); new Thread(()->{
synchronized (lock1){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock2){
System.out.println("线程1结束运行");
}
}
}).start(); new Thread(()->{
synchronized (lock2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock1){
System.out.println("线程2结束运行");
}
}
}).start();
}

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

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

  

  4、类监控

  

  5、VM概要

  展示一些JVM信息。

  

③、配置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

  添加位置如下:

  

  2、建立连接

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

  

  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下,可以直接双击启动。

  

  打开界面如下:

  

②、监控界面介绍

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

  

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

  

③、插件机制

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

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

  

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

  

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

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

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

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

  

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

  

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

  

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

  

④、配置远程连接

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

⑤、使用文档

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

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

  

Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化的更多相关文章

  1. Java集合详解及List源码分析

    对于数组我们应该很熟悉,一个数组在内存中总是一块连续的存储空间,数组的创建使用new关键字,数组是引用类型的数据,一旦第一个元素的位置确定,那么后面的元素位置也就确定了,数组有一个最大的局限就是数组一 ...

  2. Java虚拟机详解(七)------虚拟机监控和分析工具(1)——命令行

    通过前面的几篇博客,我们介绍了Java虚拟机的内存分配以及内存回收等理论知识,了解这些知识对于我们在实际生产环境中提高系统的运行效率是有很大的帮助的.但是话又说回来,在实际生产环境中,线上项目正在运行 ...

  3. Java虚拟机详解----JVM常见问题总结

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

  5. Java ClassLoad详解

    Java ClassLoad详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1. ...

  6. java关键字(详解)

    目录 1. 基本类型 1) boolean 布尔型 2) byte 字节型 3) char 字符型 4) double 双精度 5) float 浮点 6) int 整型 7) long 长整型 8) ...

  7. java对象详解

    java对象及线程详解 内存布局 普通对象布局 数组的内存布局 内部类的内存布局 对象分解 对象头-mark word(8字节) 实例数据 对齐填充(可选) java锁分析 volatile关键字 v ...

  8. Java ClassLoader详解(转载)

    Java ClassLoader详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK ...

  9. 「万字图文」史上最姨母级Java继承详解

    摘要:继承是面向对象软件技术中的一个概念.它使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用. 本文分享自华为云社区<「万字图文」史上最姨母级Java继承详解丨[奔跑吧!JAVA] ...

  10. Java内部类详解

    Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...

随机推荐

  1. ubuntu root用户 默认密码

    ubuntu安装好后,root初始密码(默认密码)不知道,需要设置. 1.先用安装时候的用户登录进入系统 2.输入:sudo passwd  按回车 3.输入新密码,重复输入密码,最后提示passwd ...

  2. 基于SDN网络的负载均衡研究与实现

    为什么需要软件定义网络 1.网络缺乏可扩展性,创新正在停滞不前.   我们最新的研究发现,几乎每两个组织中就有一个认为需要将网络功能扩展为采用SDN的主要业务触发因素,而不是其他催化剂.这一统计数据一 ...

  3. Set接口的使用

    Set集合里多个对象之间没有明显的顺序.具体详细方法请参考API文档(可见身边随时带上API文档有多重要),基本与Collection方法相同.只是行为不同(Set不允许包含重复元素). Set集合不 ...

  4. Jquery 小结

    1. 名词解释 实例对象:var p1=new Person();  p1就是实例对象 构造:function Person(){} 原型对象:在 JavaScript 中,每当定义一个对象(函数也是 ...

  5. Ubuntu 16.04 LTS设置屏幕分辨率并永久保存所设置的分辨率

    一.问题: 1.新装完Ubuntu 16.04 LTS后,进入系统打开命令行窗口,界面的分辨率显示是最小的: 2.进入System settings-->Displays 设置屏幕分辨率 显示& ...

  6. spring-boot-plus集成Spring Boot Admin管理和监控应用

    Spring Boot Admin Spring Boot Admin用来管理和监控Spring Boot应用程序 应用程序向我们的Spring Boot Admin Client注册(通过HTTP) ...

  7. Android Studio项目/Flutter 案例中Gradle报错通用解决方案(包括Unable to tunnel through proxy问题)

    目录 Step 1:修改Gradle版本为本地版本 Step 2:修改classpath为Android Studio版本 Step 3:关闭代理 Step 1:修改Gradle版本为本地版本     ...

  8. windows server 2008 R2中建立ftp站点

    在windows server 2008 R2中建立ftp站点,要遵循以下步骤: (1) 开启IIS中的ftp服务: (2) 在IIS中建立ftp站点. 具体过程如下: (1) 开启IIS中的ftp服 ...

  9. 图片验证码+session

    生成随机验证码 #!/usr/bin/env python # -*- coding:utf-8 -*- import random from PIL import Image, ImageDraw, ...

  10. C# 10分钟完成百度语音技术(语音识别与合成)——入门篇

    我们已经讲了人脸识别(入门+进阶).图片识别(入门).下面是链接: C# 10分钟完成百度人脸识别——入门篇 C# 30分钟完成百度人脸识别——进阶篇(文末附源码) C# 10分钟完成百度图片提取文字 ...