Jconsole和VisualVM使用指南

2023-12-06 14:18

本文主要是介绍Jconsole和VisualVM使用指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 1. Jconsole
      • 1.1 Jconsole简介
      • 1.2 Jconsole常用功能
    • 2. VisualVM
      • 2.1 VisualVM简介
      • 2.2 安装插件
    • 3.总结

上篇文章我们一起学习了MAT工具的使用方式,除了第三方提供的JVM工具之外,JDK也自带了Jconsole和VisualVM,功能也都很强大;

1. Jconsole

1.1 Jconsole简介

JDK1.5开始新增的java监控和管理控制吧,它提供对JVM内存、线程和类的监控;
可以直接在java的安装目录,找到bin/jconsole.exe双击打开:
在这里插入图片描述
首先选择你想要连接的java进程,点击连接;
在这里插入图片描述
包括一些堆、类、线程、CPU情况;

1.2 Jconsole常用功能

Jconsole的使用还是相对比较简单;通过Jconsole主要可以了解到堆、类、线程的情况;
1.2.1 内存信息
在这里插入图片描述
可以查看堆(Eden、S0、S1、Old)的使用情况,了解这些使用情况为你的JVM参数优化提供重要的参考指标;

1.2.2 线程信息
这块可以查看当前进程中开启的线程数量,以及检查线程之间是否存在死锁问题;
运行这段代码:

public class JconsoleTest {public static void main(String[] args) throws InterruptedException {Thread thread1 = new Thread(new Lock1(),"线程A:");Thread thread2 = new Thread(new Lock2(),"线程B:");thread1.start();thread2.start();}
}
class Resource{// 对静态资源加锁,相当于是对class加锁;public static String resource1 = "lock1";public static String resource2 = "lock2";
}class Lock1 implements Runnable{@Overridepublic void run(){try{while(true){synchronized(Resource.resource1){Thread.sleep(3000);synchronized(Resource.resource2){System.out.println("lock1获取资源2");}}}}catch(Exception e){e.printStackTrace();}}
}
class Lock2 implements Runnable{@Overridepublic void run(){try{while(true){synchronized(Resource.resource2){Thread.sleep(3000);synchronized(Resource.resource1){System.out.println("lock2获取资源1");}}}}catch(Exception e){e.printStackTrace();}}
}

在这里插入图片描述
可以看出,线程A已经阻塞,想获取一个字符串,但被线程B占用;

2. VisualVM

2.1 VisualVM简介

VisualVM与Jconsole相比,VisualVM的功能更全面,并且它有比较好用的插件功能;
在java的安装目录下,找到 jvisualvm.exe 双击打开:
在这里插入图片描述
从这首页可以看出一些内存情况,选择线程,可以查看是否有死锁问题,如果有,点击生成 dump会生成一份dump文件;
在这里插入图片描述

2.2 安装插件

感兴趣的同学可以安装一个插件:VisualGC,看一下功能图,你就会爱上它:
在这里插入图片描述
2.2.1 下载插件
下载地址:https://visualvm.github.io/pluginscenters.html

2.2.2 安装插件
在这里插入图片描述

3.总结

通过上面的小例子,差不多就对这两款工具有了大致的了解,其它工作中真正用它的机会不多,并且工作中大部分都接入的有APM,但本地开发过程中遇到问题,拿出来排查个线程、JVM等相关问题,还是非常有帮助的;

这篇关于Jconsole和VisualVM使用指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/462120

相关文章

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Rsnapshot怎么用? 基于Rsync的强大Linux备份工具使用指南

《Rsnapshot怎么用?基于Rsync的强大Linux备份工具使用指南》Rsnapshot不仅可以备份本地文件,还能通过SSH备份远程文件,接下来详细介绍如何安装、配置和使用Rsnaps... Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 li

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

Maven使用指南的笔记

文档索引 Maven in 5 Minutes 篇幅很短,快速上手,不求甚解。 执行如下命令,创建项目的基础配置。 mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1

OWASP ZAP2.4.3使用指南(中文版)

OWASP ZAP是一款开源的web安全工具,它简单易用,与burp suite相似,主要功能包含了:代理、数据拦截修改、主动扫描、被动扫描、主动攻击、爬虫、fuzzing、渗透测试等。在国外安全圈和渗透测试领域应用非常广泛,在youtube上有许多关于ZAP的视频资料。与burp suite相比,前者是一款商业渗透测试工具,部分功能不能使用,国内的大部分使用者都使用的破解版,而ZAP是开源免费的

Circuitjs 在线电路模拟器使用指南

Circuitjs 是一款 web 在线电路模拟器, 可以在浏览器上方便地模拟各种模拟或数字的电路, 用户无需安装各种软件, 生成的电路也支持在线分享给其它用户. 网址是 https://cc.xiaogd.net/. 当前版本为 v2.9.0 cc 为 circuit 的简写, 也即是电路的意思. 版本说明 在模拟器右侧栏增加了版本的说明. 另外, 在 菜单--关于 的弹出窗

Linux IPC 资源管理:ipcs和 ipcrm使用指南

文章目录 0. 引言1. IPC 资源概述2. 查询 IPC 资源2.1 使用 `ipcs` 查询 IPC 资源2.2 查询特定 IPC 资源2.3 查询系统 IPC 参数 3. 修改 IPC 系统参数4. 清除 IPC 资源5. 实践应用5.1 查询用户的消息队列5.2 查找未被清理的消息队列 0. 引言 进程间通信(IPC)允许不同的进程共享数据或进行同步操作。Linux

EventBus-Vue事件总线解析与使用指南

前言         在Vue.js中,组件通信是开发过程中非常场景的需求。根据不同的场景和需求,Vue提供了多种组件通信方式。比如父子组件通信、兄弟组件通信、跨代组件通信等。当应用程序中两个组件或者说页面之间没有引入和被引入的关系的时,或者说他们之间嵌套的结果复杂的时候,我们可以考虑如何传递数据呢?         其中适用的通信方式有 Vuex、provide 和 inject、Event

Vuex Module Decorators 使用指南

vuex-module-decorators 是基于 TypeScript 的 Vuex 装饰器库,它允许我们使用装饰器模式编写模块化的 Vuex 代码,使得代码更加简洁和可维护。对于 Vue.js 项目,尤其是使用 TypeScript 的项目,vuex-module-decorators 提供了一种更优雅的方式来组织 Vuex store。 在本文中,我们将介绍如何使用 vuex-modul

Android中的JNI使用指南一

一、简介 JNI全称是Java Native Interface(Java本地接口)单词首字母的缩写,本地接口就是指用C和C++开发的接口。由于JNI是JVM规范中的一部份,因此可以将我们写的JNI程序在任何实现了JNI规范的Java虚拟机中运行。同时,这个特性使我们可以复用以前用C/C++写的大量代码。    开发JNI程序会受到系统环境的限制,因为用C/C++语言写出来的代码或模块,编译过