JConsole 可视化工具介绍

一、 JConsole介绍

1.1 JConsole描述

Jconsole (Java Monitoring and Management Console),一种基于JMX的可视化监视、管理工具。

1.2 启动JConsole

  • 点击JDK/bin 目录下面的jconsole.exe 即可启动
  • 然后会自动自动搜索本机运行的所有虚拟机进程。
  • 选择其中一个进程可开始进行监控


1.3JConsole基本介绍

JConsole 基本包括以下基本功能:概述内存线程VM概要MBean

运行下面的程序、然后使用JConsole进行监控;注意设置虚拟机参数

import java.util.ArrayList;
import java.util.List;/***  设置虚拟机参数:*  -Xms100M -Xms100m -XX:+UseSerialGC -XX:+PrintGCDetails*/
public class JConsoleTool {static class OOMObject {public byte[] placeholder = new byte[64 * 1024];}public static void fillHeap(int num) throws InterruptedException {Thread.sleep(20000); //先运行程序,在执行监控List<OOMObject> list = new ArrayList<OOMObject>();for (int i = 0; i < num; i++) {// 稍作延时,令监视曲线的变化更加明显Thread.sleep(50);list.add(new OOMObject());}System.gc();}public static void main(String[] args) throws Exception {fillHeap(1000);while(true){//让其一直运行着}}
}

1.3.1 内存监控

内存页签相对于可视化的jstat 命令,用于监视受收集器管理的虚拟机内存。

选项 描述
Eden Space 的大小 27328KB
已用 正在使用
已提交 27328KB
最大值 27328KB
copy 上的 0.120s(3收集) 新生代使用赋值算法(copy),0.120s,总共三次
MarkSweepCompact上的 0.037(1收集) 老年代使用标记清除整理,耗时0.037,总共一次

对应的GC日志。

[GC (Allocation Failure) [DefNew: 27277K->3392K(30720K), 0.0349173 secs] 27277K->14749K(99008K), 0.0350411 secs] [Times: user=0.03 sys=0.00, real=0.04 secs] [GC (Allocation Failure) [DefNew: 30691K->3378K(30720K), 0.0446635 secs] 42049K->39217K(99008K), 0.0447387 secs] [Times: user=0.03 sys=0.01, real=0.04 secs] [GC (Allocation Failure) [DefNew: 30679K->3372K(30720K), 0.0408609 secs] 66518K->64734K(99008K), 0.0409604 secs] [Times: user=0.02 sys=0.02, real=0.04 secs] [Full GC (System.gc()) [Tenured: 61362K->66352K(68288K), 0.0372192 secs] 67024K->66352K(99008K), [Metaspace: 9535K->9535K(1058816K)], 0.0373411 secs] [Times: user=0.05 sys=0.00, real=0.04 secs]

1.3.2 线程监控

如果上面的“内存”页签相当于可视化的jstat命令的话,“线程”页签的功能相当于可视化的jstack命令,遇到线程停顿时可以使用这个页签进行监控分析。线程长时间停顿的主要原因主要有:等待外部资源(数据库连接、网络资源、设备资
源等)、死循环锁等待(活锁和死锁)


下面三个方法分别等待控制台输入、死循环演示、线程锁等待演示

/*** 等待控制台输入* @throws IOException*/public static  void waitRerouceConnection () throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));br.readLine();}
/*** 线程死循环演示*/public static void createBusyThread() {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {while (true)   // 第41行;}}, "testBusyThread");thread.start();}/*** 线程锁等待演示*/public static void createLockThread(final Object lock) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {synchronized (lock) {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}}}, "testLockThread");thread.start();}

(二)线程死锁演示

这段代码开了200个线程去分别计算1+2以及2+1的值,其实for循环是可省略的,两个线程也可能会导致死锁,不过那样概率太小,需要尝试运行很多次才能看到效果。一般的话,带for循环的版本最多运行2~3次就会遇到线程死锁,程序无法结束。造成死锁的原因是Integer.valueOf()方法基于减少对象创建次数和节省内存的考虑,[-128,127]之间的数字会被缓存[3],当valueOf()方法传入参数在这个范围之内,将直接返回缓存中的对象。也就是说,代码中调用了200次Integer.valueOf()方法一共就只返回了两个不同的对象。假如在某个线程的两个synchronized块之间发生了一次线程切换,那就会出现线程A等着被线程B持有的Integer.valueOf(1),线程B又等着被线程A持有的Integer.valueOf(2),结果出现大家都
跑不下去的情景。

package com.jvm;/*** 线程死锁验证*/
public class JConsoleThreadLock {/*** 线程死锁等待演示*/static class SynAddRunalbe implements Runnable {int a, b;public SynAddRunalbe(int a, int b) {this.a = a;this.b = b;}@Overridepublic void run() {synchronized (Integer.valueOf(a)) {synchronized (Integer.valueOf(b)) {System.out.println(a + b);}}}}public static void main(String[] args) {for (int i = 0; i < 100; i++) {new Thread(new SynAddRunalbe(1, 2)).start();new Thread(new SynAddRunalbe(2, 1)).start();}}}

结果描述:显示了线程Thread-53在等待一个被线程Thread-66持有Integer对象,而点击线程Thread-66则显示它也在等待一个Integer对象,被线程Thread-53持有,这样两个线程就互相卡住,都不存在等到锁释放的希望了


二、 VisualVM介绍

VisualVM(All-in-One Java Troubleshooting Tool);功能最强大的运行监视和故障处理程序

2.1 功能描述

  • 显示虚拟机进程以及进程的配置环境信息jpsjinfo)。
  • 监视应用程序的CPUGC、方法区(1.7及以前),元空间(JDK1.8及以后)以及线程的信息(jstat、jstack)。
  • dump以及分析堆转储快照(jmap、jhat)。
  • 方法级的程序运行性能分析找出被调用最多、运行时间最长的方法
  • 离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照

2.2 使用教程

如何使用,直接查看官网和本书教程即可。


参看资料

  • VisualVM官网地址:帮助文档
  • BTrace 简要介绍
  • 《深入理解java虚拟机》–周志明

JConsole可视化工具介绍相关推荐

  1. python可视化窗口库_Python可视化工具介绍——找到合适的库

    Python有很多可视化工具,大体上可以分为基于matplotlib的工具库和基于JS的工具库. 有如此丰富的选择是幸福的,无论你要画什么图,都能找到相对的库.但与此同时,弄清楚使用哪个工具更合适可能 ...

  2. 主流的数据可视化工具介绍

    作为一个自诩对全球分析平台了如执掌的资深数据从业人员,给各位分享分享主流的数据可视化工具. 一.可视化平台 1.FineBI 虽作一个BI工具,但是可视化效果很好,可制作Dashboard.优势在于一 ...

  3. java内存可视化_JVM系列(六)、可视化工具介绍

    1. Jconsole 1.1 Jconsole 介绍 Jconsole(Java Monitoring and Management Console)是从java5开始,是一种基于JMX(java ...

  4. Wandb:深度神经网络可视化工具介绍及本地部署方式

    为大家分享一款目前个人觉得操作非常简单,但是性能强大的一款深度学习网络可视化的插件.如果习惯于使用TensorBoard的同学应该会很快爱上它.支持多个深度学习网络框架(包括Hugging Face- ...

  5. 谷歌开源Embedding可视化工具

    谷歌开源Embedding可视化工具 导读 目前,在深度学习中可以利用多种方法或工具将特征信息转换为低维稠密的向量表示(Embedding),且Embedding在自然语言处理.知识图谱.推荐搜索.机 ...

  6. JVM-11虚拟机性能监控与故障处理工具之【JDK的可视化工具-JConsole】

    文章目录 思维导图 概述 JConsole: Java监视与管理平台 启动jconsole 内存监控示例 VM ARGS 代码 JConsole监控展示及说明 扩展问题 没有指定-Xmn,如何确定新生 ...

  7. python机器学习可视化工具Yellowbrick介绍及平行坐标图实战示例

    python机器学习可视化工具Yellowbrick介绍及平行坐标图实战示例 目录 python机器学习可视化工具Yellowbrick介绍及平行坐标图实战示例 yellowbrick简介及安装

  8. 介绍两款Docker可视化工具

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术群 来源:8rr.co/n2uh Docker是一项非常流行的容器技 ...

  9. 关于数据可视化的方法和工具介绍

    这一篇给大家全面介绍下关于数据可视化的方法和常用工具. 1. 数据可视化简介 数据可视化,是指用图形的方式来展现数据,从而更加清晰有效地传递信息,主要方法包括图表类型的选择和图表设计的准则. 随着互联 ...

  10. mac mongodb可视化工具_MongoDB从立地到成佛(介绍、安装、增删改查)

    文章作者公众号bigsai,已收录在回车课堂,如有帮助还请不吝啬点个赞赞支持一下! 课程导学 大家好我是bigsai,我们都学过数据库,但你可能更熟悉关系(型)数据库例如MySQL,SQL SERVE ...

最新文章

  1. 刚毕业就20w年薪,这个项目太牛逼了!
  2. [异常笔记] zookeeper集群启动异常: Cannot open channel to 2 at election address ……
  3. C#多线程学习 整理打包电子书
  4. hasOwnProperty
  5. JUC锁-框架与基本概念(一)
  6. 【测评】海康EliteX---全球首款USB4.0移动固态硬盘,硬盘黑科技,移动闪电侠
  7. swfit-学习笔记(数组的使用)
  8. linux yum下载RPM包后再安装LAMP环境
  9. ktor框架用到了netty吗_Ktor-构建异步服务器和客户端的 Kotlin 框架
  10. Canvas 画占比图 解决canvas锯齿 bug
  11. 绿茶2003服务器系统 新浪,我在用WIN server2003
  12. 为什么python除法结果会有小数点0_为什么Python返回0进行简单的除法计算?
  13. 赛锐信息:SuccessFactors激活高效能人员战略
  14. 15数码 java_A*算法求解15数码问题
  15. Apache Oozie Installation
  16. 一位声音甜美的小老师的Oracle学习视频
  17. 在线硬盘存储计算机,【模拟攒机-模拟装机】在线攒电脑-ZOL中关村在线
  18. css媒体查询iphone4和iphone5
  19. 32 Qt 之绘图之绘制一个漂亮的西瓜
  20. switch怎么切换服务器账号,任天堂eshop如何换区 switch账号如何切换其他服地区

热门文章

  1. 5101是多大的电阻_电阻尺寸对照表
  2. mac ios自动化 appium-doctor 安装opencv4nodejs爬坑记录
  3. ipad横竖屏切换,页面适配方法
  4. mp4文件如何转换为webm格式 1
  5. Uhuntu搜狗拼音输入法安装详细过程
  6. 计算机论文2002,自动化仪表杂志|论文|流速仪信号计算机采集系统的设计2002年9月(2)...
  7. 【论文阅读】基于深度神经网络的人体运动姿态估计与识别
  8. 基于特征点检测的人脸融合技术
  9. 【公式识别神器】Mathpix Snip 安装及其使用教程
  10. Mathpix Snip--图片中识别公式