JVM(13):虚拟机性能分析和故障解决工具之Visual VM

1 Visual VM作用

是到目前为止随JDK发布的功能最强大的运行监视和故障处理程序,并且可以遇见在未来一段时间内都是官方主力发展的虚拟机故障处理工具。官方在VisualVM的软件说明中写上了“All-in-One”的描述字样,预示着他除了运行监视、故障处理外,还提供了很多其他方面的功能。如性能分析,VisualVM的性能分析功能甚至比起很多专业的收费的工具都不会逊色多少,而且VisualVM还有一个很大的优点:不需要被监视的程序基于特殊的运行,因此他对应用程序的实际性能的影响很小,使得他可以直接应用在生产环境中。

VisualVM基于NetBeans平台开发,因此他一开始就具备了插件扩展功能的特性,通过插件扩展支持,VisualVM可以做到:

  • 显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)。
  • 监视应用程序的CPU、GC、堆、方法区以及线程的信息(jstat、jstack)。
  • dump以及分析堆转储快照(jmap、jhat)。
  • 方法级的程序运行性能分析,找到被调用最多、运行时间最长的方法。
  • 离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照,可以将快照发送开发者处进行Bug反馈。
  • 其他plugins的无限的可能性…

2 使用介绍

运行测试代码如下:

package com.example.demo;import java.util.ArrayList;
import java.util.List;public class visualVMdemo {public static void main(String[] args) throws Exception{test1();System.in.read();}private static void test1() throws Exception{List<Student> list = new ArrayList<Student>();for (int i = 0; i < 100; i++) {Thread.sleep(1000);list.add(new Student());}}
}class Student {private byte[] big = new byte[5 * 1024 * 1024]; //5M
}

2.1 在控制台输入:jvisualvm执行即可;

2.2 安装插件

​ (1) 从主菜单中选择“工具”>“插件” ;

(2) 在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装” ;

​(3) 逐步完成插件安装程序。

当然这边不需要安装,大家根据正式环境需要进行安装。

2.3 默认插件

(1)概述(Overview)

​ 程序的基本信息和启动参数、环境变量等等;

(2)监视(Monitor)

​ 用于显示CPU、内存(分为Heap和Metaspace)、类和线程的使用情况或者数量,另外还包括执行垃圾回收和对堆 Dump的快捷功能 ;

(3)线程(Threads)

​ 详细查看每个线程的运行时间及状态等;

(4)抽样器(Sampler)

​ 对CPU和内存进行一段时长的取样,从而对应用程序进行分析 ;

3 测试案例

3.1 测试代码

package com.example.demo;import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class visualVMdemo2 {public static void main(String[] args) throws Exception{System.in.read();System.out.println("死锁");deadLock();}private static void deadLock() {Lock lock1 = new ReentrantLock();Lock lock2 = new ReentrantLock();new Thread(() -> {try {lock1.lock();Thread.sleep(100);lock2.lock();} catch (InterruptedException e) {e.printStackTrace();}}, "myThread1").start();new Thread(() -> {try {lock2.lock();Thread.sleep(100);lock1.lock();} catch (InterruptedException e) {e.printStackTrace();}}, "myThread2").start();}
}

3.2 Visual VM查看现场情况

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

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

相关文章

ConcurrentHashMap是如何保证线程安全的-put方法简要分析

简介 ConcurrentHashMap 是 Java 中并发编程中常用的线程安全的哈希表&#xff08;HashMap&#xff09;实现。它具有以下几个显著的特点和优点&#xff0c;适合在特定的并发场景中使用&#xff1a; 线程安全性&#xff1a; ConcurrentHashMap 提供了并发访问的线程安全保证&am…

左耳听风_032_31_编程范式游记2-_泛型编程

你好&#xff0c;我是陈浩网名英&#xff0c;做耳朵house.在上一节课中呢&#xff0c;我们从c语言开始说起&#xff0c;聊了聊面向过程式的辩证范式。 那相信从代码的角度呢&#xff0c;你对这种类型的语言啊已经有了一些理解。 那作为一门高级语言呢&#xff0c;c语言啊它绝…

python进阶函数

目录 函数多返回值函数多种传参方式匿名函数 函数多返回值 问&#xff1a;如果一个函数如些两个return&#xff08;如下所示&#xff09;&#xff0c;程序如何执行&#xff1f; def return_num():return 1return 2result return_num() print(result)答&#xff1a;只执行了第…

Web3 前端攻击:原因、影响及经验教训

DeFi的崛起引领了一个创新和金融自由的新时代。然而&#xff0c;这种快速增长也吸引了恶意行为者的注意&#xff0c;他们试图利用漏洞进行攻击。尽管很多焦点都集中在智能合约安全上&#xff0c;但前端攻击也正在成为一个重要的威胁向量。 前端攻击的剖析 理解攻击者利用前端漏…

DDD学习笔记三

模型的构造块&#xff1a;实体、值对象、领域服务 &#xff08;1&#xff09;实体的领域特征 在领域中&#xff0c;一个由身份而不是属性值定义的客观概念就是实体&#xff0c;这个身份可以由一个唯一标识确认。 一个概念是否是实体取决于系统的应用场景&#xff0c;一个标识是…

ORA-00903: invalid table name\nORA-06512: at line 1\n

错误信息 ORA-00903: invalid table name\nORA-06512: at line 1\n原因 ORA-00903: invalid table name 解释: 这个错误表示在 SQL 语句中使用了无效的表名。 由于在建表中出现了以数字开头的表名,所以出现以下错误 解决方案 表名不能以数字开头

RabbitMQ交换器类型

直连交换机&#xff08;Direct Exchange&#xff09; 直连交换机的工作方式是最简单的路由模式&#xff0c;它会根据消息的routing key将其精确地路由到与之绑定的队列上。每个队列通过一个特定的routing key与交换机绑定。如果一条消息的routing key与队列的绑定键完全匹配&am…

AWT的菜单组件

AWT的菜单组件 前言一、菜单组件的介绍常见的菜单相关组件常见菜单相关组件集成体系图菜单相关组件使用小要点 二、AWT菜单组件的代码示例示例一示例二实现思路 前言 推荐一个网站给想要了解或者学习人工智能知识的读者&#xff0c;这个网站里内容讲解通俗易懂且风趣幽默&…

【Python】Pickle:Python对象序列化与反序列化的利器

在Python编程中&#xff0c;我们经常需要在程序的不同运行之间保存和加载数据&#xff0c;这时候&#xff0c;Python标准库中的pickle模块就派上了用场。pickle模块可以将Python对象序列化为字节流&#xff0c;便于存储到文件或通过网络传输&#xff1b;同时&#xff0c;它也可…

CentOS 7 和 CentOS Stream 8 的主要区别

更新频率&#xff1a; CentOS 7&#xff1a;传统的稳定版本&#xff0c;主要用于生产环境&#xff0c;更新频率较低&#xff0c;主要包含安全补丁和重要修复。CentOS Stream 8&#xff1a;滚动发布版本&#xff0c;更新更频繁&#xff0c;包含最新的特性和改进。它处于 Fedora …

springboot汽车租赁管理系统-计算机毕业设计源码08754

目 录 摘 要 第 1 章 引 言 1.1 选题背景和意义 1.2 国内外研究现状 1.3 论文结构安排 第 2 章 系统的需求分析 2.1 系统可行性分析 2.1.1 技术方面可行性分析 2.1.2 经济方面可行性分析 2.1.3 法律方面可行性分析 2.1.4 操作方面可行性分析 2.2 系统功能需求分析…

基于线调频小波变换的非平稳信号分析方法(MATLAB)

信号处理领域学者为了改进小波变换在各时频区间能量聚集性不高的缺点&#xff0c;有学者在小波分析基础上引入调频算子构成了线性调频小波变换&#xff0c;线调频小波一方面继承了小波变换的理论完善性&#xff0c;另一方面用一个新的参数&#xff08;线调频参数&#xff09;刻…

Nginx 配置文件

Nginx的配置文件的组成部分&#xff1a; 主配置文件&#xff1a;nginx.conf子配置文件&#xff1a;include conf.d/*.conf 全局配置 nginx 有多种模块 核心模块&#xff1a;是 Nginx 服务器正常运行必不可少的模块&#xff0c;提供错误日志记录 、配置文件解析 、事件驱动机…

46 - 删除重复的电子邮箱(高频 SQL 50 题基础版)

46 - 删除重复的电子邮箱 delete p1 from Person p1,Person p2 where p1.emailp2.email and p1.id>p2.id;

跟着DW学习大语言模型-使用Streamlit构建一个RAG应用

在大语言模型 (LLMs) 的应用中&#xff0c;我们面临众多挑战&#xff0c;包括领域知识的缺乏、信息的准确性问题以及生成的虚假内容。检索增强生成 (RAG) 通过引入外部知识库等额外信息源&#xff0c;为这些问题提供了有效的缓解策略。RAG 在那些需要不断更新知识的知识密集型场…

ios13多窗口(UIWindowScene)学习笔记

ios13引入了UIWindowScene类、UIWindowSceneDelegate协议以便支持多窗口功能&#xff0c;但其适用于ipad&#xff0c;不适用于iphone&#xff0c;因为iphone不支持多窗口功能。注意&#xff0c;这里说的窗口不是UIWindow&#xff0c;而是UIWindowScene。 ios13前后的app的UI架…

2024年【建筑电工(建筑特殊工种)】考试试题及建筑电工(建筑特殊工种)模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【建筑电工(建筑特殊工种)】考试试题及建筑电工(建筑特殊工种)模拟考试题库&#xff0c;包含建筑电工(建筑特殊工种)考试试题答案和解析及建筑电工(建筑特殊工种)模拟考试题库练习。安全生产模拟考试一点通结合…

2024年【广东省安全员A证第四批(主要负责人)】新版试题及广东省安全员A证第四批(主要负责人)考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【广东省安全员A证第四批&#xff08;主要负责人&#xff09;】新版试题及广东省安全员A证第四批&#xff08;主要负责人&#xff09;考试试卷&#xff0c;包含广东省安全员A证第四批&#xff08;主要负责人&am…

Go线程实现模型-P

P 概述 P是G能够在M中运行关键。Go的运行时系统会适时地让P与不同的M建立或断开关联&#xff0c;以使P中的那些可运行的G能够及时获得&#xff0c;这与操作系统内核在CPU之上实时切换不同进程或线程的情况类似 改变P的数量 改变单个Go程序间拥有的P的最大数量有两种方法 调…

Scala编程的瑞士军刀:包对象的威力与应用

标题&#xff1a;Scala编程的瑞士军刀&#xff1a;包对象的威力与应用 在Scala编程中&#xff0c;包对象&#xff08;Package Object&#xff09;是一种非常有用的工具&#xff0c;它允许开发者在包级别共享代码&#xff0c;而无需创建单独的类或对象。包对象是单例的&#xf…