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 显示各个线程调用的堆栈情况以及线程运行状态。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

zip加密txt文件后,暴力破解时会有多个解密密码可以打开的疑问??

最近在做一个关于zip压缩文件解密的测试&#xff0c;发现通过暴力解密时&#xff0c;会有多个解密密码可以打开&#xff0c;非常疑惑&#xff0c;这里做个问题&#xff0c;希望能有大佬解惑。 1、首先在本地创建一个113449.txt的文件&#xff0c;然后右键txt文件选择压缩&…

AI赋能软件测试

AI赋能软件测试 AI赋能软件测试软件测试分类软件质量模型:用来衡量软件质量的维度AI赋能软件测试 随着AI时代的到来,如何轻松掌握软件测试新趋势,将AI技术应用于软件测试行业,提高测试速度与测试效率~~ 传智星云AI助手:https://nebula.itcast.cn tips:各种AI工具应有尽有…

图像处理方向信息

前言 Exif 规范 定义了方向标签&#xff0c;用于指示相机相对于所捕获场景的方向。相机可以使用该标签通过方向传感器自动指示方向&#xff0c;也可以让用户通过菜单开关手动指示方向&#xff0c;而无需实际转换图像数据本身。 在图像处理过程中&#xff0c;若是原图文件包含…

jeecg快速启动(附带本地运行可用版本下载)

版本整理&#xff08;windows x64位&#xff09;&#xff1a; redis&#xff1a;3.0.504 MYSQL&#xff1a;5.7 Maven&#xff1a;3.9.4(setting文件可下载) Nodejs&#xff1a;v16.20.2&#xff08;建议不要安装默认路径下&#xff0c;如已安装在c盘&#xff0c;运行yarn报…

MySQL之优化服务器设置(五)

优化服务器设置 高级InnoDB设置 innodb_old_blocks_time InnoDB有两段缓冲池LRU(最近最少使用)链表&#xff0c;设计目的是防止换出长期很多次的页面。像mysqldump产生的这种一次性的(大)查询&#xff0c;通常会读取页面到缓冲池的LRU列表&#xff0c;从中读取需要的行&…

安装wsl

安装wsl 先决条件&#xff1a; 打开控制面板->选择程序与功能->选择启动或关闭windows功能&#xff0c;将以下框选的勾选上 二、到Mircosoft store下载Ubuntu 三、如果以上都勾选了还报以下错误 注册表错误 0x8007019e Error code: Wsl/CallMsi/REGDB_E_CLASSNOTREG…

机器学习周报第46周

目录 摘要Abstract一、文献阅读1.1 摘要1.2 研究背景1.3 论文方法1.4 模块分析1.5 网络规格1.6 高效的端到端对象检测1.7 mobile former模块代码 目录 摘要Abstract一、文献阅读1.1 摘要1.2 研究背景1.3 论文方法1.4 模块分析1.5 网络规格1.6 高效的端到端对象检测1.7 mobile f…

9. 文本三剑客之awk

文章目录 9.1 什么是awk9.2 awk命令格式9.3 awk执行流程9.4 行与列9.4.1 取行9.4.2 取列 9.1 什么是awk 虽然sed编辑器是非常方便自动修改文本文件的工具&#xff0c;但其也有自身的限制。通常你需要一个用来处理文件中的数据的更高级工具&#xff0c;它能提供一个类编程环境来…

JVM-GC-什么是垃圾

JVM-GC-什么是垃圾 前言 所谓垃圾其实是指&#xff0c;内存中没用的数据&#xff1b;没有任何引用指向这块内存&#xff0c;或者没有任何指针指向这块内存。没有的数据应该被清除&#xff0c;垃圾的处理其实是内存管理问题。 JVM虽然不直接遵循冯诺依曼计算机体系架构&#…

SAP HCM 员工供应商过账详解 财务角度理解员工供应商过账

导读 INTRODUCTION 员工供应商:在某些情况下,特别是在大型组织或集团公司中,员工可能同时扮演着供应商的角色,为组织内部的其他部门或子公司提供产品或服务。例如,一个技术部门的员工可能为销售部门提供技术支持或定制开发服务。,还有一种,就是员工在公司挂账的欠款,每…

SpringBoot如何自定义启动Banner 以及自定义启动项目控制台输出信息 类似于若依启动大佛 制作教程

前言 Spring Boot 项目启动时会在控制台打印出一个 banner&#xff0c;下面演示如何定制这个 banner。 若依也会有相应的启动动画 _ooOoo_o8888888o88" . "88(| -_- |)O\ /O____/---\____. \\| |// ./ \\||| : |||// \/ _||||| -:- |||||- \| | \\…

GraogGNSSLib学习

GraogGNSSLib学习 程序编译环境版本项目编译结果问题 程序编译 GraphGNSSLib 环境版本 程序开源是在ubuntu16.04-kinetic环境跑通的&#xff0c;但是我的环境是UBUNTU20.04&#xff0c;所以&#xff0c;先进行了ROS的安装&#xff0c;因为我的系统是ubuntu20.04所以&#xf…

Hadoop 2.0:主流开源云架构(四)

目录 五、Hadoop 2.0访问接口&#xff08;一&#xff09;访问接口综述&#xff08;二&#xff09;浏览器接口&#xff08;三&#xff09;命令行接口 六、Hadoop 2.0编程接口&#xff08;一&#xff09;HDFS编程&#xff08;二&#xff09;Yarn编程 五、Hadoop 2.0访问接口 &am…

基于WPF技术的换热站智能监控系统13--控制设备开关

1、本节目的 本次工作量相对有点大&#xff0c;有点难度&#xff0c;需要熟悉MVVM模式&#xff0c;特别是属性绑定和命令驱动&#xff0c;目标是点击水泵开关&#xff0c;让风扇转动或停止&#xff0c;风扇连接的管道液体流动或静止。 &#xff0c;具体对应关系是&#xff1a;…

计算机专业:黄金时代是否依旧?

计算机专业&#xff1a;黄金时代是否依旧&#xff1f; 随着2024年高考落幕&#xff0c;数百万高三学生将面临人生中的重要抉择&#xff1a;选择大学专业。在这个关键节点&#xff0c;计算机相关专业是否仍是“万金油”的选择&#xff1f;在过去的几十年里&#xff0c;计算机科…

【SpringBoot】SpringBoot:构建实时聊天应用

文章目录 引言项目初始化添加依赖 配置WebSocket创建WebSocket配置类创建WebSocket处理器 创建前端页面创建聊天页面 测试与部署示例&#xff1a;编写单元测试 部署扩展功能用户身份验证消息持久化群组聊天 结论 引言 随着实时通信技术的快速发展&#xff0c;聊天应用在现代We…

曲线拟合 | 二次B样条拟合曲线

B 样条曲线拟合实例&#xff1a;能平滑化曲线 1. 实例1 为MASS包中mcycle数据集。它测试了一系列模拟的交通车事故中&#xff0c;头部的加速度&#xff0c;以此来评估头盔的性能。times为撞击时间(ms)&#xff0c;accel为加速度&#xff08;g&#xff09;。首先导入数据&#…

为什么选择 ABBYY FineReader PDF ?

帮助用户们对PDF文件进行快速的编辑处理&#xff0c;同时也可以快速识别PDF文件里的文字内容&#xff0c;并且可以让用户们进行文本编辑&#xff0c;所以可以有效提升办公效率。 ABBYY-ABBYY Finereader 15 Win-安装包&#xff1a;https://souurl.cn/OY2L3m 高级转换功能 ABBY…

你焦虑了吗

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

如何进行文件映射

创建一个文件WebMvcConfig package com.itheima.config;import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.…