jvisualvm工具使用

news2024/10/1 17:24:30

jdk自带的工具jvisualvm,可以分析java内存使用情况,jvm相关的信息。

1、设置jvm启动参数

设置jvm参数**-Xms20m -Xmx20m -XX:+PrintGCDetails** 最小和最大堆内存,打印gc详情

在这里插入图片描述

2、测试代码

TestScheduleClassGc

package com.core.schedule;

import com.core.Test.TestClassGC;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @auth admin
 * @date 2023/2/15 19:21
 */
@Component
public class TestScheduleClassGc {
    private static final AtomicInteger ATOMIC_INTEGER = new AtomicInteger(0);
    private static final ExecutorService executorService = Executors.newFixedThreadPool(100);

    @Scheduled(fixedRate = 1000)
    private void print1() {
        long xmsMemory = Runtime.getRuntime().totalMemory() / 1024 / 1024;
        // Xms20m -Xm250m -XX:+PrintGCDetails
        //返回Java虚拟机中使用的最大堆内存
        long xmxMemory = Runtime.getRuntime().maxMemory() / 1024 / 1024;
        long l = Runtime.getRuntime().freeMemory();

        System.out.println("-Xms:" + xmsMemory + "M");
        System.out.println("-Xmx:" + xmxMemory + "M");
        System.out.println("-Xmx:" + l + "M");

        for (int i = 0; i < 500; i++) {
//            TestClassGC.anInt++;
            executorService.execute(this::createGcLass);
        }
    }

    private void createGcLass() {
        LocalDateTime now1 = LocalDateTime.now();
        System.out.println("Thread_name=" + Thread.currentThread().getName() + "||||||" + now1 + "==" + ATOMIC_INTEGER.incrementAndGet());
        System.out.println();
        TestClassGC testClassGC = new TestClassGC();
        testClassGC.setName("xxxxxxxxxxxx" + ATOMIC_INTEGER.get());
        try {
            testClassGC.sleep();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

TestClassGC

package com.core.Test;

import java.util.concurrent.TimeUnit;

/**
 * @auth admin
 * @date 2023/2/15 19:20
 */
public class TestClassGC {
    public static int anInt = 0;
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void sleep() throws InterruptedException {
        TimeUnit.SECONDS.sleep(1);
    }
}

3、jvisualvm 连接java程序

jdk的安装路径下,双击左键即可启动
在这里插入图片描述

找到启动的程序双击连接即可使用,jvisualvm相关的功能菜单
概述、监视、线程相关的菜单栏
在这里插入图片描述

3、下面以监视简单说明

堆dump

jvm参数相关使用情况 ,堆dump可以保存为堆dump文件,保存下次导入使用
在这里插入图片描述

导出的dump文件,可以另存为,下次导入
在这里插入图片描述
在这里插入图片描述

4、观察类的实例数目

在这里插入图片描述
发现类的实例比较多,查看线程信息
在这里插入图片描述

看堆栈找到TestClassGC.java:22出现很多次,大胆猜测这里有问题。验证结论,分析代码。
在这里插入图片描述
在这里插入图片描述
找到对应的代码,是因为这里线程休眠,会阻塞很多的对象在线程队列中。队列 Executors.newFixedThreadPool(100) 创建完100个核心线程数,来的消息就会放入到阻塞队列。队列LinkedBlockingQueue无穷队列,导致对象堆积很多。
在这里插入图片描述

以上是jvisualvm工具的一个简单使用

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

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

相关文章

LeetCode 82. 删除排序链表中的重复元素 II

原题链接 难度&#xff1a;middle\color{orange}{middle}middle 题目描述 给定一个已排序的链表的头 headheadhead &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,…

ASML逆袭史:人、资金、技术,缺一不可

前言 近年来&#xff0c;由于众所周知的原因&#xff0c;荷兰ASML&#xff08;阿斯麦&#xff09;公司的先进半导体制造设备——光刻机&#xff0c;进入普通大众视野&#xff0c;成为人们茶余饭后谈论的焦点话题之一。 1月底&#xff0c;“美日荷三方谈判达成协议&#xff0c;可…

Selenium自动化测试Python二:WebDriver基础

欢迎阅读WebDriver基础讲义。本篇讲义将会重点介绍Selenium WebDriver的环境搭建和基本使用方法。 WebDriver环境搭建 Selenium WebDriver 又称为 Selenium2。 Selenium 1 WebDriver Selenium 2 WebDriver是主流Web应用自动化测试框架&#xff0c;具有清晰面向对象 API&…

SAP ABAP 输出结果带有空格

方法一&#xff1a; 字段内容前增加空格&#xff0c;需使用全角空格&#xff0c;使用半角空格时&#xff0c;ALV显示无效&#xff0c;空格无法显示&#xff0c; 全角与半角的切换方法&#xff1a;shift空格切换&#xff0c; 如下的标记部分&#xff0c;要想通过ALV显示空格&…

mfc140u.dll丢失的解决方法,mfc140u.dll文件修复

mfc140u.dll丢失的解决方法&#xff0c;其实要解决这个问题一点都不难&#xff0c;我们主要知道是什么原因造成的&#xff0c;那么就可以轻松的解决。 一.mfc140u.dll是什么 "MFC140u.dll"是一个Windows动态链接库文件&#xff0c;它是Microsoft Visual C 2015运行…

TortoiseSVN的使用

基本概念 版本库 SVN保持数据的地方&#xff0c;所有的文件都保存在这个库中&#xff0c;Tortoise访问的就是远程服务器上的Subversion版本库。 工作拷贝 就是工作副本&#xff0c;可将版本库的文件拷贝到本地中&#xff0c;可以任意修改&#xff0c; 不会影响版本库。在你…

责任链模式(Chain of Responsibility Pattern)

意图&#xff1a;避免请求发送者与接收者耦合在一起&#xff0c;让多个对象都有可能接收请求&#xff0c;将这些对象连接成一条链&#xff0c;并且沿着这条链传递请求&#xff0c;直到有对象处理它为止。 主要解决&#xff1a;职责链上的处理者负责处理请求&#xff0c;客户只…

常用调试golang的bug以及性能问题的实践方法

文章目录如何分析程序运行时间和CPU利用率情况1.shell内置time指令/usr/bin/time指令如何分析golang程序的内存使用情况&#xff1f;1.内存占用情况查看如何分析golang程序的CPU性能情况1.性能分析注意事项2.CPU性能分析A.Web界面查看B.使用pprof工具查看如何分析程序运行时间和…

PHP(12)文件上传

PHP&#xff08;12&#xff09;文件上传一、文件上传原理二、表单写法三、预定义变量 $_FILES四、移动临时文件五、多文件上传1. 同名表单2. 不同名表单六、多文件处理1. 同名文件2. 不同名文件七、封装文件上传函数一、文件上传原理 文件从客户机上传至服务器指定目录。 步骤…

Redhat7.6升级openssh(超详细)

一、准备工作 从官网下载新版的openssh-7.9p1.tar.gz 准备rhel-server-7.6-x86_64-dvd.iso用于使用yum安装依赖 二、具体升级步骤 1.查看系统版本 [rootredhat ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.6 (Maipo) 2.查看openssh现有版本 …

金三银四面试必看,自动化测试如何解决日志问题

前言 前几天在员群里&#xff0c;有同学问了一个自动化测试实践中遇到的问题&#xff1a; 持续集成的自动化用例很多&#xff0c;测试环境日志level为debug&#xff0c;日志量大概40G/每天&#xff0c;定位问题时日志查询很慢&#xff0c;该怎么解决&#xff1f; 这个问题可…

pytorch基础入门教程

pytorch基础入门教程 Pytorch一小时入门教程 前言 机器学习的门槛并没有想象中那么高&#xff0c;我会陆续把我在学习过程中看过的一些文章和写过的代码以博客的形式分享给大家&#xff0c;和大家一起交流&#xff0c;这个是本系列的第一篇&#xff0c;pytoch入门教程&#x…

软件测试2-测试必须有策略和测试有哪些最高原则

什么是软件测试测试是为发现错误而执行程序的过程。软件测试一个破坏性的过程&#xff0c;甚至是一个施虐的过程&#xff0c;也就是第一天说的“找茬”游戏。 当一个输入框让我输入手机号码时&#xff0c;我偏不&#xff0c;我要输入非手机号码&#xff0c;甚至不填。 当界面提…

定时任务使用总结

定时任务表达式生成工具网站&#xff1a;https://cron.qqe2.com/定时任务选型&#xff1a;xxl-job 官方文档&#xff1a;https://www.xuxueli.com/xxl-job/安装定时任务调度中心 xxl-job-admin第一步、先导入xxl-job的数据库&#xff1a;地址&#xff1a;https://gitee.com/xux…

2.2 多区域集成IS-IS

2.2.2 实验二:多区域集成IS-IS 1. 实验目的  实现IS-IS协议DIS优先级修改 实现IS-IS协议网络类型修改 实现IS-IS协议外部路由引入 实现IS-IS接口cost修改 实现IS-IS路由渗透配置2. 实验拓扑 配置多区域集成IS-IS如图2-5所示: …

Java 万年历、周六日计算、节假日导出

目录 通过 Java 的基本语法来实现万年历 Java 获取一年中所有的周六和周日 Java 节假日导入导出 通过 Java 的基本语法来实现万年历 在 Java 的时间计算方面还有很多好用的工具类&#xff0c;Java 常用的工具类封装框架链接如下&#xff1a;HUTool 框架官网 package com.ta…

企业降本增效的催化剂:敏捷迭代

伴随着开源技术的大爆发&#xff0c;新一代的软件技术如雨后春笋般层出不穷。每家企业在硬件及软件开发上都有许多开源技术可选&#xff0c;目的还是在于提高效率&#xff0c;降低开发成本。 本篇文章&#xff0c;带大家了解下促进企业降本增效的重要理念&#xff1a;敏捷迭代…

前端错误/性能监控(vue)

配置目录结构 错误监听&#xff1a;可以提前发现前端的错误&#xff0c;并且找到对应的位置进行修改。因为等等环境因素可能导致不同的问题&#xff0c;这些问题难以发现&#xff0c;影响用户体验。 性能监听&#xff1a;可以及时发现问题&#xff0c;比如下载的js文件、image时…

Stream流源码分析及技巧(含大量案例)

Stream流源码分析及技巧&#xff08;含大量案例&#xff09; 目录 Stream流源码分析及技巧&#xff08;含大量案例&#xff09; 更新说明 简介&#xff08;这部分摘了部分官方文档&#xff09; 特性 Stream接口关系图 Stream流接口方法 Stream流之间的转换 与Stream流相…

华为OD面试经验分享,尤其注意机试题部分

文章目录招聘流程和背景介绍面试准备机试题目类型和解答技巧在算法部分在操作系统部分面试官提问和答题技巧面试总结和建议推荐一些华为 od 常见的机试题题目&#xff1a;两数之和题目&#xff1a;二叉树的遍历题目&#xff1a;链表反转题目&#xff1a;最大子序和招聘流程和背…