JVMj之console Java监视与管理控制台

jconsole Java监视与管理控制台

1、jconsole介绍

jconsole (java monitoring and management console)是一款基于JMX (Java Management Extensions)

的可视化监视和管理工具。

2、启动jconsole

1、在linuxwindwos下通过jconsole启动即可。

2、然后会自动搜索本机运行的所有虚拟机进程。

3、选择其中一个进程可开始进行监控。

在这里插入图片描述

在这里插入图片描述

3、jconsole基本介绍

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

运行下面的程序,然后使用jconsole进行监控,注意设置虚拟机参数。

package com.example.controller;import java.util.ArrayList;
import java.util.List;public class Demo1 {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) {//让其一直运行着}}
}

配置启动参数:-Xms100M -XX:+UseSerialGC -XX:+PrintGCDetails

在这里插入图片描述

在这里插入图片描述

可以切换顶部的选项卡查看各种指标信息:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

内存监控

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

在这里插入图片描述

代码运行,控制台也会输出gc日志:

[GC (Allocation Failure) [DefNew: 27305K->3392K(30720K), 0.0087378 secs] 27305K->14929K(99008K), 0.0088041 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 
[GC (Allocation Failure) [DefNew: 30720K->3369K(30720K), 0.0125603 secs] 42257K->38591K(99008K), 0.0125827 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 
[GC (Allocation Failure) [DefNew: 30697K->3367K(30720K), 0.0206170 secs] 65919K->63766K(99008K), 0.0206669 secs] [Times: user=0.00 sys=0.02, real=0.02 secs] 
[Full GC (System.gc()) [Tenured: 60398K->66528K(68288K), 0.0339940 secs] 66709K->66528K(99008K), [Metaspace: 9255K->9255K(1058816K)], 0.0343586 secs] [Times: user=0.05 sys=0.00, real=0.04 secs] 

4、线程监控

如果上面的内存页签相当于可视化的jstat命令的话,线程页签的功能相当于可视化的jstack命令,遇到线程停顿

时可以使用这个页签进行监控分析。线程长时间停顿的主要原因主要有:等待外部资源(数据库连接、网络资源、

设备资源等)、死循环、锁等待(活锁和死锁)

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

**第一步:**运行下面的代码。

package com.example.controller;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class Demo2 {public static void main(String[] args) throws IOException {waitRerouceConnection();createBusyThread();createLockThread(new Object());}/*** 等待控制台输入** @throws IOException*/public static void waitRerouceConnection() throws IOException {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));try {br.readLine();} catch (IOException e) {e.printStackTrace();}}}, "waitRerouceConnection");thread.start();}/*** 线程死循环演示*/public static void createBusyThread() {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {while (true) {;}}}, "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();}
}

**第二步:**打开jconsole中查看上面程序运行情况,可以查看到3个目标线程。

在这里插入图片描述

在这里插入图片描述

**第三步:**查看目标线程信息

waitRerouceConnection线程处于读取数据状态,如下图:

在这里插入图片描述

testBusyThread线程位于代码45行,处于运行状态,如下图:

在这里插入图片描述

testLockThread处于活锁等待状态,如下图:

在这里插入图片描述

只要lock对象的notify()或notifyAll()方法被调用,这个线程便可能激活以继续执行。

通过 线程 这个窗口可以很方便查询虚拟机中的线程堆栈信息,对发现系统中的一些问题非常有帮助。

5、线程死锁演示

**第一步:**运行下面代码:

package com.example.controller;public class Demo3 {public static void main(String[] args) {User u1 = new User("u1");User u2 = new User("u2");Thread thread1 = new Thread(new SynAddRunalbe(u1, u2, 1, 2, true));thread1.setName("thread1");thread1.start();Thread thread2 = new Thread(new SynAddRunalbe(u1, u2, 2, 1, false));thread2.setName("thread2");thread2.start();}/*** 线程死锁等待演示*/public static class SynAddRunalbe implements Runnable {User u1, u2;int a, b;boolean flag;public SynAddRunalbe(User u1, User u2, int a, int b, boolean flag) {this.u1 = u1;this.u2 = u2;this.a = a;this.b = b;this.flag = flag;}@Overridepublic void run() {try {if (flag) {synchronized (u1) {Thread.sleep(100);synchronized (u2) {System.out.println(a + b);}}} else {synchronized (u2) {Thread.sleep(100);synchronized (u1) {System.out.println(a + b);}}}} catch (InterruptedException e) {e.printStackTrace();}}}public static class User {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public User(String name) {this.name = name;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +'}';}}
}

thread1持有u1的锁,thread2持有u2的锁,thread1等待获取u2的锁,thread2等待获取u1的锁,相互需要获取

的锁都被对方持有者,造成了死锁。程序中出现了死锁的情况,我们是比较难以发现的。需要依靠工具解决。刚好

jconsole就是这个美妙的工具。

**第二步:**在jconsole中打开上面程序的监控信息:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

从上面可以看出代码39行和46行处导致了死锁。

在这里插入图片描述

关于程序死锁的,我们还可以使用命令行工具jstack来查看java线程堆栈信息,也可以发现死锁。

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/165963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于Vue和SpringBoot的独居老人物资配送系统

项目编号&#xff1a; S 045 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S045&#xff0c;文末获取源码。} 项目编号&#xff1a;S045&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4…

Linux(6):文件与文件系统的压缩,打包与备份

压缩文件的用途与技术 由于 1 byte 8 bits &#xff0c;所以每个byte当中会有8个空格&#xff0c;而每个空格可以是0,1。 其实文件里面有相当多的『空间』存在&#xff0c;并不是完全填满的&#xff0c;而『压缩』的技术就是将这些『空间』填满&#xff0c;以让整个文件占用…

微信小程序商城实例mpvue-xbyjShop-master(附精选源码32套,涵盖商城团购等)

mpvue-xbyjShop 基于mpvue的微信小程序商城&#xff08;小程序端&#xff0c;服务端&#xff09; 小程序端 技术栈 mpvue mpvue-router-patch mpvue-entry vuex webpack ES6/7 flyio mpvue-wxparse 项目运行 微信开发中工具选中mpvue-xbyjShop/buyer作为项目目录即可功…

JavaScript的学习

HTML的学习-CSDN博客 从html的学习中 其实我已经用到了 JavaScript的脚本 &#xff08;GPT&#xff09; 例如 echo <script>alert("账号密码错误"); window.location"index.html";</script>; 弹窗 然后定位到 index.html 这里能够让我们更…

品牌线上窜货查的出来吗

如果窜货不治理会出现什么局面&#xff0c;显见的当然是渠道混乱&#xff0c;低价丛生&#xff0c;严重的还会导致真假混卖&#xff0c;最后所有的后果都会由品牌承担&#xff0c;口碑的影响是必然的&#xff0c;那品牌的衰败也会是一种趋势&#xff0c;所以治理窜货是品牌发展…

Windows | 模仿网易云任务栏实现自定义按钮及缩略图

前言 最近更新网易云发现任务栏按钮中除了播放相关的按钮&#xff0c;多了一个喜欢的按钮&#xff1a; 之前我一直以为网易云任务栏的按钮只是 Windows 为音乐软件专门提供的&#xff0c;于是我又看了一眼系统自带的播放器&#xff0c;发现并没有爱心按钮&#xff1a; 这时我就…

C在国内就业已经拉胯,ChatGPT告诉我的

文章目录 一、前言二、ChatGPT查到的数据三、数据亮点 1.C语言近3年数据大跌2.招聘数量每年都在剧增的是全栈工程师3.薪资涨幅最高的是全栈和网安 四、结语 一、前言 不仅前在微信群里搭建了一个ChatGPT 5.0做智能助手&#xff0c;让他来帮我回答群问题&#xff0c; 搭建好…

数十亿美元商机!英国数字基础设施公司Equinix与法国量子计算公司Alice Bob 合作

​&#xff08;图片来源&#xff1a;网络&#xff09; 近日&#xff0c;全球数字基础设施公司Equinix宣布与全球领先的法国量子计算公司Alice & Bob合作&#xff0c;旨在共同开发市场上最为可靠的量子处理器之一。此次合作将使Equinix公司的客户通过使用Equinix Metal和Eq…

好的程序员有什么特质呢?

程序员想要提升自己&#xff0c;一定要关注到工作中的方方面面。而一个好的程序员&#xff0c;一般都有这些特质&#xff1a; 弱者抱怨环境&#xff0c;强者改变环境 不要试图通过抱怨环境来获得工作环境上的改变&#xff0c;这不仅不会给你带来任何实质性的改变&#xff0c;…

自定义字符-摄氏度汉字一

本文为博主 日月同辉&#xff0c;与我共生&#xff0c;csdn原创首发。希望看完后能对你有所帮助&#xff0c;不足之处请指正&#xff01;一起交流学习&#xff0c;共同进步&#xff01; > 发布人&#xff1a;日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

springboot+vue项目如何集成onlyoffice开源文档组件

一、onlyoffice是什么 ONLYOFFICE 是一个开源的办公套件&#xff0c;适合多人在线协作。由总部位于总部在拉脱维亚的 IT 公司Acensio System SIA 开发。它提供在线协作文档编辑器&#xff08;包括文档、电子表格、演示文稿和表单&#xff09;&#xff0c;适用于 Windows、Linu…

python tkinter使用(五)

python tkinter使用(五) 本篇文章讲述tkinter 中treeview的使用 Treeview是一个多列列表框&#xff0c;可以显示层次数据。 #!/usr/bin/python3 # -*- coding: UTF-8 -*- """Author: zhTime 2023/11/23 下午8:28 .Email:Describe: treeview 使用 "&quo…

Linux上自动挂载windows下的网络共享文件夹

比如我们想在ubuntu上挂载一个windows的共享文件夹&#xff0c;我们可以用如下方式实现。 首先我们将windows下的文件夹右键选择【属性】&#xff0c;然后选择【共享】。 选择需要共享的用户&#xff0c;然后设置权限级别。 点击共享&#xff0c;然后点击完成。 这样我们在wi…

Go语言网络爬虫工程经验分享:pholcus库演示抓取头条新闻的实例

网络爬虫是一种自动从互联网上获取数据的程序&#xff0c;它可以用于各种目的&#xff0c;如数据分析、信息检索、竞争情报等。网络爬虫的实现方式有很多&#xff0c;不同的编程语言和框架都有各自的优势和特点。在本文中&#xff0c;我将介绍一种使用Go语言和pholcus库的网络爬…

基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境爬虫1.安装Anaconda2.安装Python3.63.更换pip源4.安装Python包5.下载phantomjs 模型训练1.安装依赖2.安装lmageAl 实际应用1.前端2.安装Flask3.安装Nginx 相关其它博客工程源代码下载其它资料下载 前言 本项目通过爬虫技术…

Word怎么看字数?简单教程分享!

“我在写文章时&#xff0c;总是想看看写了多少字。但是我发现我的Word无法看到字数。在Word中应该怎么查看字数呢&#xff1f;请帮帮我&#xff01;” Word是一个广泛使用的文档编辑工具。在我们编辑文章时&#xff0c;如果想查看写了多少字&#xff0c;也是可以轻松完成的。 …

leetcode:环形链表的入环点

题目描述 题目链接:力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目分析 我们假设起点到环的入口点的距离是L&#xff0c;入口点到相遇点的距离是X&#xff0c;环的长度是C 那么画图我们可以得知&#xff1a; 从开始到相遇时slow走的距离是LX从…

Adobe的组织工具程序Bridge 2024 版本下载与安装

目录 前言一、Bridge 2024安装二、使用配置总结 前言 Adobe Bridge是由 Adobe 公司开发的一款用于管理和组织创意资产的工具。它是Adobe Creative Cloud 套件的一部分&#xff0c;为设计师、摄影师和其他创意专业人员提供了一个集中管理和浏览其多媒体文件的平台。注&#xff…

Ubuntu开机显示No bootable devices found

Ubuntu开机报错&#xff0c;显示显示No bootable devices found&#xff0c;如下图所示&#xff1a; 解决方案如下&#xff1a; 1. F2进入BIOS (1) 重启开启&#xff0c;按F2进入BIOS系统。 (2) 进入Boot Sequence&#xff0c;目前系统选择了UEFI&#xff0c;而Legacy选项为…

Android : AlertDialog对话框、单选、多选、适配器-简单应用

示例图&#xff1a; 1 &#xff1a;创建 AlertDialog.Builder 对象&#xff1b; 2 &#xff1a;调用 setIcon() 设置图标&#xff0c; setTitle() 或 setCustomTitle() 设置标题&#xff1b; 3 &#xff1a;设置对话框的内容&#xff1a; setMessage() 还有其他方法来指定显示…