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

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

一、JConsole

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

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

①、启动 JConsole

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

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

  

  这是一个可执行文件,直接双击便可打开。打开以下:服务器

  

②、监控界面介绍

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

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

  一、监控概览jvm

  

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

  二、内存监控

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

  监视区域以下:

  

  三、线程监控

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

  

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

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

 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。两个线程谁也不释放,因而便形成了死锁现象。

  经过监控工具即可以检测到,以下:

  

  四、类监控

  

  五、VM概要

  展现一些JVM信息。

  

③、配置Tomcat远程监控

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

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

  添加位置以下:

  

 

  二、创建链接

  经过上面的配置,启动Tomcat后,咱们只须要在 JConsole 的远程链接界面,输入 192.168.146.200:9004 ,而后点击链接便可。

  

  三、链接错误状况

  若是没法链接,须要依次检测以下信息:

  ①、配置的端口不能被占用,能够经过 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大致上是同样的,而后创建链接便可。

 二、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

相关文章
相关标签/搜索