JVM 性能分析——jdk 自带命令分析工具(jps/jstat/jinfo/jmap/jhat/jstack)

文章目录

    • jps(Java Process Status):查看正在运行的Java进程
    • `jstat(JVM Statistics Monitoring Tool):查看 JVM 的统计信息`
    • jinfo(Configuration Info for Java):实时查看和修改JVM配置参数
    • `jmap(JVM Memory Map):导出内存映像文件`和查看内存使用情况
    • jhat(JVM Heap Analysis Tool):堆分析工具
    • jstack(JVM Stack Trace):打印 JVM 中线程快照

在 windows 环境下演示

jps(Java Process Status):查看正在运行的Java进程

1、查看正在运行的Java进程:jps(Java Process Status)

在这里插入图片描述

jstat(JVM Statistics Monitoring Tool):查看 JVM 的统计信息

查看内存使用情况,分析堆中各部分使用情况、过程变化、GC 时间等。

在生产环境中,可以执行 jstat 命令,快速收集应用程序的运行数据,可以快速了解应用程序的运行状况,有助于在线上问题发生时进行快速诊断和分析。通过查看内存区域的容量和利用率,可以发现内存泄漏和溢出等问题以及优化应用程序的内存管理;还可以帮助开发者快速定位 GC 相关的性能瓶颈。通常结合其他监控工具(如 JConsole、VisualVM、Jprofiler 等)使用。

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]参数解释:<option>:指定要显示的性能指标,如 -gc、-gccapacity、-gcutil 等-t:在输出中显示时间戳,显示程序运行的时间-h<lines>:每隔多少行输出一个表头<vmid>:Java 虚拟机进程 ID<interval>:输出间隔,单位为毫秒,每隔多长时间输出一次<count>:指定输出的总次数常用选项及含义:-gc:显示与GC相关的堆信息,Eden、Suvivor、老年代等空间使用情况及GC次数、时间相关信息-gccapacity:与-gc基本相同,但关注Java堆各个区域使用的最大、最小空间,可以查看内存池的配置和使用情况。-gcutil:与-gc基本相同,但关注空间使用百分比-class:类加载统计相关信息-compiler:JIT 编译器统计-printcompilation:方法编译统计如:jstat -gc 12345 1000 10:每秒输出一次,共输出10次,PID 为 12345 的 Java 进程的垃圾收集统计信息。

帮助:
在这里插入图片描述
示例:
在这里插入图片描述

jstat -gc 29336 的输出字段:S0C、S1C:Survivor 0 和 Survivor 1 区域的当前容量(KB)S0U、S1U:Survivor 0 和 Survivor 1 区域的已使用空间(KB)EC:Eden 区域的当前容量(KB)EU:Eden 区域的已使用空间(KB)OC:Old 区域的当前容量(KB)OU:Old 区域的已使用空间(KB)MC:元空间的当前容量(KB)MU:元空间的已使用空间(KB)CCSC:压缩类空间的当前容量(KB)CCSU:压缩类空间的已使用空间(KB)YGC:Young GC 事件的次数YGCT:Young GC 事件的总时间(秒)FGC:Full GC 事件的次数FGCT:Full GC 事件的总时间(秒)GCT:GC 总时间(秒)
jstat -gccapacity 29336 的输出字段:NGCMN、NGCMX、NGC:新生代最小容量、最大容量和当前容量S0C、S1C、EC:Survivor 0、Survivor 1 和 Eden 区域的当前容量OGCMN、OGCMX、OGC、OC:Old 代最小容量、最大容量、当前容量和容量MCMN、MCMX、MC:元空间最小容量、最大容量和当前容量CCSMN、CCSMX、CCSC:压缩类空间最小容量、最大容量和当前容量YGC、FGC:Young GC 和 Full GC 事件的次数
jstat -gcutil 29336 的输出字段:S0、S1、E、O、M、CCS:Survivor 0、Survivor 1、Eden、Old、元空间、压缩类空间 区域的利用率YGC、YGCT:Young GC 事件的次数和总时间FGC、FGCT:Full GC 事件的次数和总时间GCT:GC 总时间

jinfo(Configuration Info for Java):实时查看和修改JVM配置参数

可以在生产环境中远程执行 jinfo 命令,收集应用程序的配置信息,查看正在运行的虚拟机配置参数;也可以用于部分虚拟机参数的在线调整,在不重启应用程序的情况下,动态地修改 Java 虚拟机参数。

帮助:
在这里插入图片描述
示例:
在这里插入图片描述

扩展查看命令:

  • java -XX:+PrintFlagsInitial —— 查看所有JVM参数启动的初始值

  • java -XX:+PrintFlagsFinal —— 查看所有JVM参数的最终值

  • java -XX:+PrintCommandLineflags —— 查看那些已经被用户或者VM设置过的详细的XX参数的名称和值

    如:java -XX:+PrintFlagsFinal > output.txt,这里为了方便查看,将查询结果输出到指定的文件中。
    在这里插入图片描述

jmap(JVM Memory Map):导出内存映像文件和查看内存使用情况

可以在应用程序运行时生成内存快照文件(xx.hprof 文件),这些快照可用于离线分析应用程序的内存使用情况。可以看看这篇文章 使用 JProfiler 工具分析 dump.hprof 堆内存快照文件排查内存溢出问题。

  1. 导出 dump 文件(堆转储快照文件,.hprof),(重点关注)
  2. 查看内存的相关信息

1、导出 dump 文件(堆转储快照文件,.hprof)

手动的方式,通过命令调用实时触发导出。jmap -dump:format=b,file=<filename.hprof> <pid>,导出所有对象。jmap -dump:live,format=b,file=<filename.hprof> <pid>,只导出存活的对象。自动的方式,配置对应的 JVM 参数,会在内存溢出的时候自动触发导出。-XX:+HeapDumponOutOfMemoryError,开启内存溢出时导出 dump 文件。-XX:HeapDumpPath= <filename.hprof>,dump 文件导出路径。

帮助:
在这里插入图片描述
示例:
只导出存活的对象,导出路径为 F:\logs\jmap_dump.hprof
在这里插入图片描述
在这里插入图片描述

2、查看内存的相关信息

jmap -heap pid —— 查看堆内存相关信息,和 jstat 的功能有点类似。

为了方便查看,这里将打印的堆内存信息输出到指定的文件中,F:\logs\heap.txt
在这里插入图片描述
在这里插入图片描述

jmap -histo pid —— 当前对象集的相关信息,类、类的实例个数、占用内存大小。

在这里插入图片描述
为了方便查看,这里将打印的堆内存信息输出到指定的文件中,F:\logs\histo.txt。可以查看到各个类的实例对象个数、各类的所有实例对象占用的内存大小。
在这里插入图片描述

jhat(JVM Heap Analysis Tool):堆分析工具

jhat 命令与 jmap 命令搭配使用,用于分析 jmap 生成的 heap dump 文件,通过 jhat 提供的 Web 界面,可以对内存快照进行交互式的分析和浏览。可以生成内存快照中的对象统计报告、分析内存快照中对象之间的引用关系、支持 Java 对象查询语言(OQL)等,可以帮助开发者快速定位内存泄漏等问题。

使用这个命令分析起来比较麻烦,jhat 令在 JDK9、JDK10 中已经被删除,官方建议用 visualVM 代替,visualVM 是一个图形化界面分析更方便;也可以使用其他工具,如 jprofiler,可以看看这篇文章 使用 JProfiler 工具分析 dump.hprof 堆内存快照文件排查内存溢出问题,是如何使用工具分析 dump 堆内存快照文件来分析排查问题。
帮助:
在这里插入图片描述
示例:打开指定 dump 文件。
在这里插入图片描述
上述命令运行,服务启动完后,进入 http://localhost:7000/ 页面可以查看指定类、实例对象相关信息,端口号默认为 7000
在这里插入图片描述

jstack(JVM Stack Trace):打印 JVM 中线程快照

jstack 用于生成虚拟机指定进程当前时刻的线程快照(虚拟机堆栈跟踪)。线程快照就是当前虚拟机内指定进程的每一条线程正在执行的方法堆栈的集合。

生成线程快照可用于定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等问题。这些都是导致线程长时间停顿的常见原因。当线程出现停顿时,就可以用 jstack 显示各个线程调用的堆栈情况以及线程运行状态。

帮助:
在这里插入图片描述
示例:
在这里插入图片描述

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

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

相关文章

电子电气架构 --- 智能座舱功能应用

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

MFC工控项目实例之四在调试目录下创建指定文件夹

承接专栏《MFC工控项目实例之三theApp变量传递对话框参数》 在调试目录Debug下创建DATA、LIB、TEMP三个文件夹 1、SEAL_PRESSURE.h中添加代码 class CSeatApp : public CWinApp { ... public:CString m_Path;CString m_DataPath,m_TempPath,m_LibPath; ... };2、SEAL_PRESSURE…

LabVIEW电子类实验虚拟仿真系统

开发了基于LabVIEW开发的电子类实验虚拟仿真实验系统。该系统通过图形化编程方式&#xff0c;实现了复杂电子实验操作的虚拟化&#xff0c;不仅提高了学生的操作熟练度和学习兴趣&#xff0c;而且通过智能评价模块提供即时反馈&#xff0c;促进教学和学习的互动。 项目背景 在…

R 初级教程之一

IT的发展目前已经相当的内卷&#xff0c;到处都在说24年是将来4年最难的一年&#xff01;确实是&#xff0c;眼下各大厂商都在疯狂的裁员砍掉不营利的业务&#xff0c;收紧业务&#xff0c;不再盲目的扩张。小公司更是水深火热&#xff0c;无以言表。近期有个医院联系让使用R给…

AI Stable diffusion 报错:稳定扩散模型加载失败,退出

可能是内存不够&#xff0c;看看你最近是加了新的大的模型&#xff0c;可以把你的stable-diffusion-webui\models\Stable-diffusion目录下的某个ckpt删除掉&#xff0c;可能ckpt太大&#xff0c;无法加载成功&#xff1b; Stable diffusion model failed to load, exiting 如图…

天阳科技集团北京卡洛其项目管理专家李先林受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 天阳科技集团北京卡洛其项目管理专家李先林先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“应用软件项目管理标准化实践探讨”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1…

设计模式- 责任链模式Chain of Responsibility(行为型)

责任链模式(Chain of Responsibility) 责任链模式是一种行为模式&#xff0c;它为请求创建一个接收者对象的链&#xff0c;解耦了请求的发送者和接收者。责任链模式将多个处理器串联起来形成一条处理请求的链。 图解 角色 抽象处理者&#xff1a; 一个处理请求的接口&#xf…

机器人建模、运动学与动力学仿真分析(importrobot,loadrobot,smimport)

机器人建模、运动学与动力学仿真分析是机器人设计和开发过程中的关键步骤。 一、机器人建模 机器人建模是描述机器人物理结构和运动特性的过程。其中&#xff0c;URDF&#xff08;Unified Robot Description Format&#xff09;是一种常用的机器人模型描述方法。通过URDF&…

springboot汽车配件管理系统(源码+sql+论文报告)

绪论 1.1 研究意义和背景 随着我国经济的持续发展&#xff0c;汽车已经逐步进入了家庭。汽车行业的发展&#xff0c;也带动了汽车配件行业的快速发展。 汽车配件行业的迅猛发展&#xff0c; 使得汽配行业的竞争越来越激烈。如何在激烈的竞争中取胜&#xff0c;是每家汽车零部…

算法设计与分析 实验1 算法性能分析

目录 一、实验目的 二、实验概述 三、实验内容 四、问题描述 1.实验基本要求 2.实验亮点 3.实验说明 五、算法原理和实现 问题1-4算法 1. 选择排序 算法实验原理 核心伪代码 算法性能分析 数据测试 选择排序算法优化 2. 冒泡排序 算法实验原理 核心伪代码 算…

你焦虑了吗

前段时间&#xff0c;无意间在图书馆看到一本书《认知觉醒》&#xff0c;书中提到了焦虑的相关话题&#xff0c;从焦虑的根源&#xff0c;焦虑的形式&#xff0c;如何破解焦虑给了我点启示&#xff0c;分享给一下。 引语&#xff1a; 焦虑肯定是你的老朋友了&#xff0c;它总像…

为什么电源滤波器中的电容器太大

所有 AC-DC 转换器&#xff0c;无论是线性电源还是具有某种开关元件&#xff0c;都需要一种机制来获取交流侧的变化功率并在直流侧产生恒定功率。通常&#xff0c;大滤波电容器用于在交流功率高于直流负载所需时吸收和存储能量&#xff0c;并在交流功率低于所需时向负载提供能量…

AI大模型技术揭秘-参数,Token,上下文和温度

深入理解 AI 大模型:参数、Token、上下文窗口、上下文长度和温度 人工智能技术的飞速发展使AI大模型大放异彩,其中涉及的“参数”、“Token”、“上下文窗口”、“上下文长度”及“温度”等专业术语备受瞩目。这些术语背后究竟蕴含何意?它们如何影响AI大模型的性能?一起揭开…

解决用Three.js实现嘴型和语音同步时只能播放部分部位的问题 Three.js同时渲染播放多个组件变形动画的方法

前言 参考这篇文章ThreeJSChatGPT 实现前端3D数字人AI互动&#xff0c;前面搭后端、训练模型组内小伙伴都没有什么问题&#xff0c;到前端的时候&#xff0c;脸部就出问题了。看我是怎么解决的。 好文章啊&#xff0c;可惜百度前几个都找不到&#xff0c;o(╥﹏╥)o 问题情况 …

使用python绘制三维曲线图

使用python绘制三维曲线图 三维曲线图定义特点 效果代码 三维曲线图 三维曲线图&#xff08;3D曲线图&#xff09;是一种用于可视化三维数据的图表&#xff0c;它展示了数据在三个维度&#xff08;X、Y、Z&#xff09;上的变化。 定义 三维曲线图通过在三维坐标系中绘制曲线…

S7-1200PLC和V90总线伺服通过工艺对象实现定位控制(标准报文3应用)

V90PN总线伺服驱动和S7-1200PLC通信需要安装GSD文件,PLC通过各种标准报文实现V90的位置和速度控制。 1、V90伺服驱动器控制(PN版本) V90伺服驱动器控制(PN版本)_v90 pn 最简接线-CSDN博客文章浏览阅读303次。V90伺服驱动器脉冲控制常用参数和接线,请查看下面文章链接:SMAR…

【推荐】Perl入门教程特点功能文本处理读取文件替换文本写入文件分割字符数据库处理环境准备安装(包含示咧)

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

达梦基于什么数据库?

达梦数据库&#xff08;DM Database&#xff09;是中国自主研发的高性能关系型数据库管理系统。它并不是基于其他现有的数据库系统&#xff0c;而是完全自主开发的。这种独立开发使其具有很多独特的特点和优势&#xff0c;特别是在安全性、性能优化、适应中国本地化需求等方面。…

数据库管理-第204期 数据库的IO掉速,也许是SSD的锅(20240615)

数据库管理204期 2024-06-15 数据库管理-第204期 数据库的IO掉速&#xff0c;也许是SSD的锅&#xff08;20240615&#xff09;1 SSD物理结构2 SSD颗粒类型3 DRAM & SLC Cache3.1 DRAM3.2 SLC Cache3.3 其他方式 4 缓外降速总结 数据库管理-第204期 数据库的IO掉速&#xff…

华为机考入门python3--(36)牛客36-字符串加密

分类&#xff1a;字符串 知识点&#xff1a; 判断一个元素是否在集合中 if char not in key_set 计算字母差 index ord(char) - ord(a) 题目来自【牛客】 # 生成加密表 def generate_cipher_table(key):key_set set()cipher_table ""# 去重for char in k…