Win上通过Jconsole查看Java程序资源占用情况(教程总结,一篇就够了)

news2024/11/16 7:54:46

最近需要读取一个大文件,为了判断有没有读取到内存中,需要一个能查看jar包占用内存的工具,一顿面向百度后,发现了jdk自带的工具Jconsole,将教程分享给大家

一、介绍

JConsole 是一个内置 Java 性能分析器,Java 5开始 引入了 JConsole。可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole来 监控 Java 应用程序性能跟踪 Java 中的代码

Jconsole工具查看程序的资源占用请求。安装jdk时bin目录有jconsole.exe工具,或者通过 Win + R,输入jconsole.exe启动jconsole( 可以从命令行直接输入jconsole

这款工具的好处在于,占用系统资源少,而且结合Jstat,可以有效监控到java内存的变动情况,以及引起变动的原因。在项目追踪内存泄露问题时,很实用。

二、启动


在这里插入图片描述

三、连接

当分析工具弹出时(取决于正在运行的 Java 版本以及正在运行的 Java 程序数量),可能会出现一个对话框,要求输入一个进程的 URL 来连接,也可能列出许多不同的本地 Java 进程(有时包含 JConsole 进程本身)来连接。如图所示:
在这里插入图片描述
想分析哪个程序就双击那个进程。
在这里插入图片描述
在这里插入图片描述

此时,就可以看到资源占用情况,实现了最基本的功能,如果想了解远程连接,以及界面详情,可以往下看在这里插入图片描述

1、设置JAVA程序运行时可以被JConsolse连接分析

  1. 本地程序(相对于开启JConsole的计算机),无需设置任何参数就可以被本地开启的JConsole连接(Java SE 6开始无需设置,之前还是需要设置运行时参数 -Dcom.sun.management.jmxremote )
  2. 无认证连接 (下面的设置表示:连接的端口为8999、无需认证就可以被连接
  3. 参考:Monitoring and Management Using JMX Technology - Java SEMonitoring and Management Guide

四、界面展示

在连接上Java应用程序后便可以查看应用程序的概况,如图所示。图中4张折线图分别显示了堆内存的使用情况、系统的线程数量、加载类的数量及CPU的使用率。

一般主要关注内存栏线程栏类栏概述栏VM栏次之,MBeans栏在追踪具体问题时用到。

值得一提的是对着图点击右键可以保存数据到CSV文件,以后可以使用其他工具来分析这些数据。

随时可以使用JConsole的在右上角的绿色连接状态图标,断开或重新连接到正在运行的Java虚拟机。 从下拉菜单中选择连接,然后新建连接,您可以同时连接到任何数量运行中的Java虚拟机。

在这里插入图片描述

1、内存监控

在JConsole中,可以查看堆的详细信息,包括堆的大小、使用率、eden区大小、survivor区大小及永久区大小等。

切换到“内存”选项卡,JConsole可以显示当前内存的详细信息。这里不仅包括堆内存的整体信息,更细化到了eden区、survivior区及老年代的使用情况,同时也包括非堆区,即永久代的使用情况。单击右上角的“执行GC”按钮,可以强制应用程序进行一次FullGC操作,如图所示。
在这里插入图片描述
堆和非堆内存

Java虚拟机管理两种内存:堆和非堆内存,这两者都是Java虚拟机启动时创建的。

  1. 堆内存是运行时数据区域,Java VM的所有类实例和数组分配内存。 可能是固定或可变大小的堆。
  2. 非堆内存包括在所有线程和Java虚拟机内部处理或优化所需的共享的方法。 它存储了类的结构,运行常量池,字段和方法数据,以及方法和构造函数的代码,方法区在逻辑上是堆的一部分,看具体实现的方式。根据实现方式的不同,Java虚拟机可能不进行垃圾收集或压缩。 堆内存一样,方法区域可能是一个固定或可变大小。 方法区的内存不需要是连续的。
  3. 除了方法区,Java虚拟机可能需要进行内部处理或优化,这也属于非堆内存的内存。 例如,实时(JIT)编译器需要内存用于存储从Java虚拟机的高性能的代码翻译的机器码。

2、线程监控

使用JConsole可以方便地查看系统内的线程信息,并且可以快速地定位死锁问题。

JConsole中的“线程”选项卡允许开发人员监控程序内的线程,如图所示。JConsole显示了系统内的线程数量,并在屏幕下方显示了程序中所有的线程。单击线程名称,便可以查看线程的栈信息。(如果线程过多,可以在下面的过滤栏中输入字符串过滤出你想要观察的线程)

统计图显示的是线程数目的峰值(红色)和当前活动的线程(蓝色)。

线程选项卡提供了几个有用的操作。

findMonitorDeadlockedThreads:检测,如果任何线程对象监视器锁定陷入死锁。 此操作返回一个死锁的线程ID数组。
getThreadInfo:返回线程的信息。 这包括名称,堆栈跟踪和监测锁,该线程目前已封锁,如果有的话,哪个线程持有该锁,以及线程争用统计。
getThreadCpuTime:返回给定的线程所消耗的CPU时间
在这里插入图片描述

单击“检测死锁”按钮,还可以自动检测多线程应用程序的死锁情况。

3、类加载情况

JConsole的“类”选项卡如图所示,显示了系统已经装载的类数量,在“详细信息”栏中,还显示了已卸载的类数量。

在这里插入图片描述

4、虚拟机信息

VM摘要显示了当前Java应用程序的基本信息,如虚拟机类型、虚拟机版本、系统的线程信息、操作系统的内存信息、堆信息、垃圾回收器的类型、JVM参数及类路径等。

在“VM摘要”选项卡中,JConsole显示了当前应用程序的运行环境,包括虚拟机类型、版本、堆信息及虚拟机参数等,如图所示。
在这里插入图片描述

5、MBean管理

通过JConsole,可以对Java应用程序中的Mbean进行统一管理。

MBean选项卡允许通过JConsole进行MBean管理,包括查看或者设置MBean的属性,以及运行MBean的方法等。如图示为MBean的管理界面,这里选中了Memory的Verbose属性。通过修改Verbose的属性值,可以在程序运行时动态打开或者关闭GC操作的输出信息。
在这里插入图片描述
MBean的种类繁多,功能也比较强大,列举几个常用的MBean操作,
在这里插入图片描述

6、使用插件

除了基本功能外,JConsole还支持插件扩展。在JDK的安装目录下就有一个自带的JConsole插件,它位于%JAVA_HOME%\demo\management\JTop下。使用以下命令可以让JConsole加载插件并启动:
在这里插入图片描述
JConsole启动后,连接到任意Java应用程序,便可以进入JTop页面,如图所示。

JTop插件按照CPU占用时间进行排序,将占用CPU时间最长的线程显示在表格顶端。通过这个插件,开发人员便能迅速地找到占用CPU时间最长的线程名称,并通过线程快照定位线程代码。
在这里插入图片描述

JTop插件的完整源代码都可以在JDK的安装目录下找到,有兴趣的读者可以修改JTop的源码,让它显示更多的线程信息。

参考链接

  1. JConsole详解:https://blog.csdn.net/D420941934/article/details/120473194
  2. 通过Java查看程序资源占用情况:https://www.jb51.cc/java/3556429.html
  3. jconsole工具使用: https://www.cnblogs.com/kongzhongqijing/articles/3621441.html

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

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

相关文章

手把手教你使用unisat 交易市场|BRC20|Unisat

开始前先熟悉下这张平台市场标注图,能让你跟得心应手! 一、查看实时成交信息(已 moon 为例子) 搜索进入Token界面,点击 Orders 可以看到 1w 枚成交 87.86U(单价 30 聪,大约 0.008786u&#xf…

牛客网剑指offer|中等题day2|JZ76删除链表中的重复节点、JZ23链表中环的入口节点、JZ24 反转链表(简单)

JZ76删除链表中的重复节点 链接:删除链表中重复的结点_牛客题霸_牛客网 参考代码: 自己好像还是偏向双指针这种想法,所以用了两个指针,这样感觉更好理解一些。 对了,去重有两种,我一开始写成了简单的那种&a…

MGV3001_ZG_当贝纯净桌面-线刷固件包

MGV3001_ZG_当贝纯净桌面-线刷固件包-内有教程及短接点 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置的没用的软件,运…

【标准化方法】(3) Group Normalization 原理解析、代码复现,附Pytorch代码

今天和各位分享一下深度学习中常用的标准化方法,Group Normalization 数据分组归一化,向大家介绍一下数学原理,并用 Pytorch 复现。 Group Normalization 论文地址:https://arxiv.org/pdf/1803.08494.pdf 1. 原理介绍 在目标检测…

Javascript - Cookie的获取和保存应用

在之前的博客介绍了如何利用 Selenium去搭建 cookie池,进行自动化登录、获取信息等。那什么是cookie呢?它的作用又是什么呢? 这里,再重复简单介绍一下。 cookie 是浏览器储存在用户电脑上的一小段文本文件。该文件里存了加密后的用…

LeetCode之回溯算法

文章目录 思想&框架1.组合/子集和排列问题2.组合应用问题 组合/子集问题1. lc77 组合2. lc216 组合总和III3. lc39 组合总和4. lc40 组合总和II5. lc78 子集6. lc90 子集II 排列1. 全排列I2. 全排列II 组合问题的应用1.lc17 电话号码的字母组合2.lc131 分割回文串3. lc19 复…

集约式智能自动化办公,实在智能门户开启政企数字化转型新范式

导语: 随着数字化和智能化的快速发展,数字技术已经深入到各个行业和领域。实在智能基于数字员工在行业的深厚理解和丰富的实践经验,打造一站式的智能化统一平台——智能门户,打破了技术壁垒和系统数据之间的割裂感,实现…

软考A计划-重点考点-专题五(计算机网络知识)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

Apache Sentry

官方 说明 Sentry是一种用于在Hadoop集群中控制和管理访问权限的工具。因此,CDH的Sentry指的是Cloudera Distribution for Hadoop中集成的Sentry组件,用于管理Hadoop集群中的访问控制和权限管理。 作用 Sentry是一个用于管理Hadoop集群中的访问权限的…

基于C++实现旅行线路设计

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 系统根据风险评估,为旅客设计一条符合旅行策略的旅行线路并输出,系统能查询当前时刻旅客所处的地点和状态(停留城市/所在交通工具)。 实验内容和实验环境描述 1.1 实验内容 城…

【吐槽贴】项目经理如何进行高效沟通?

“项目最大的风险就是都觉得没有风险。” 这还是跟同行聊天时开玩笑的一句话,最近我却深有体会。一直以为一切正常的项目,最近却接连出了问题,复盘才发现几个关键性问题都出在沟通方面,还一直认为沟通能力是自己的优势。这次主要踩…

使用java-timeseries库,使用arima算法预测时间序列(

项目地址&#xff1a; GitHub - signaflo/java-timeseries: Time series analysis in Java maven&#xff1a; <dependency><groupId>com.github.signaflo</groupId><artifactId>timeseries</artifactId><version>0.4</version> &…

【剖析STL】String

1.什么是STL&#xff1f; 标准模板库&#xff08;Standard Template Library&#xff0c;STL&#xff09;是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。虽说它主要出现到C中&#xff0c;但在被引…

Dockerfile部署java项目

一、dockerfile展示 将DockerFile 配置文件放到 maven项目目录内&#xff0c;和pom.xml同级。 # Download code FROM bitnami/git:2 AS git RUN mkdir -p /home/app/src RUN git -c http.sslVerifyfalse -C /home/app/src clone -b local https://github.com/test.git# # Bui…

2023年宜昌市中等职业学校技能大赛 “网络搭建与应用”竞赛题-1

2023年宜昌市中等职业学校技能大赛 “网络搭建与应用”竞赛题 一、竞赛内容分布 “网络搭建及应用”竞赛共分二个部分&#xff0c;其中&#xff1a; 第一部分&#xff1a;企业网络搭建部署项目&#xff0c;占总分的比例为50%&#xff1b; 第二部分&#xff1a;企业网络服…

打工人使用ChatGPT的一天!

众所周知&#xff0c;ChatGPT 自去年OpenAI 推出以来&#xff0c;这款 AI 聊天机器人可以说迅速成为了 AI 界的「当红炸子鸡」 作为一名资深的打工人&#x1f477;&#x1f3fb;‍♂️&#xff0c;我们应该怎样利用ChatGPT提高工作效率呢&#xff1f;今天给大家介绍下打工人使…

c++ cuda加速学习笔记

1. 环境配置 (1)显卡驱动下载官网&#xff0c;需要知道自己电脑的显卡类型 搜索链接&#xff1a;https://www.nvidia.com/Download/index.aspx?langzh-cn(2)怎么知道自己的的显卡类型 https://jingyan.baidu.com/article/2a13832888b2a7464a134fef.html 此电脑->管理->…

通过Modbus实现TTS语音全彩声光告警-博灵语音通知终端-网络语音报警灯

背景 目前PLC在工业领域应用广泛&#xff0c;在运行过程中可能会涉及到各种告警。 为了简单快速的实现语音声光告警&#xff0c;本文以大连英仕博科技出品的博灵语音通知终端为例&#xff0c;演示如何通过Modbus TCP协议实现声光告警推送。 播报效果演示 Modbus-博灵语音通知…

Google Play 政策更新重点回顾 (上) | 2023 年 4 月

Google Play 始终如一地为大家打造值得信赖的安全平台&#xff0c;支持大家走向成功。为了让您更及时更清晰地掌握 Google Play 最新政策&#xff0c;我们准备了两篇文章为您详细说明 2023 年 4 月的政策更新内容&#xff0c;以及深度解析。本文是第一篇内容&#xff0c;我们将…

日撸 Java 三百行day46

文章目录 说明day46 快速排序1.基本思路2. 代码 说明 闵老师的文章链接&#xff1a; 日撸 Java 三百行&#xff08;总述&#xff09;_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护&#xff1a;https://github.com/fulisha-ok/sampledata day46 快速排序 …