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

news2024/11/24 18:59:31

文章目录

    • 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.coloradmin.cn/o/1827959.html

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

相关文章

vs+qt5.0 使用poppler 操作库

Poppler 是一个用来生成 PDF 的C类库&#xff0c;从xpdf 继承而来。vs编译库如下&#xff1a; vs中只需要添加依赖库即可 头文件&#xff1a;

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

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

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

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

【计算机毕业设计】240基于微信小程序的校园综合服务平台

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

大型企业IT基础架构和应用运维体系

大型企业IT基础架构和应用运维体系 在数字化转型的浪潮中&#xff0c;大型企业面临着日益复杂的IT环境。高效的IT基础架构和应用运维体系&#xff0c;是确保企业业务连续性和竞争力的关键。本文将探讨大型企业如何构建强健的IT基础架构&#xff0c;并建立高效的应用运维体系&a…

案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序

案例 Cacheable 是 Spring Framework 提供的一个注解&#xff0c;用于在方法执行前先检查缓存&#xff0c;如果缓存中已存在对应的值&#xff0c;则直接返回缓存中的值&#xff0c;而不执行该方法体。如果缓存中不存在对应的值&#xff0c;则执行方法体&#xff0c;并将方法的…

BerkeleyDB练习

代码; #include <db.h> #include <stdio.h>int main() {DB *dbp;db_create(&dbp, NULL, 0);printf("Berkeley DB version: %s\n", db_version(NULL, NULL, NULL));dbp->close(dbp, 0);return 0; } 编译运行

Python武器库开发-武器库篇之Mongodb未授权漏洞扫描器(五十六)

Python武器库开发-武器库篇之Mongodb未授权漏洞扫描器(五十六) MongoDB 未授权访问漏洞简介以及危害 MongoDB是一款非常受欢迎的开源NoSQL数据库&#xff0c;广泛应用于各种Web应用和移动应用中。然而&#xff0c;由于默认配置的不当或者管理员的疏忽&#xff0c;导致不少Mon…

基于CentOS Stream 9平台安装Redis7.0.15

已更正systemctl管理Redis服务问题 1. 官方下载地址 https://redis.io/downloads/#redis-downloads 1.1 下载或上传到/opt/coisini目录下&#xff1a; mkdir /opt/coisini cd /opt/coisini wget https://download.redis.io/releases/redis-7.0.15.tar.gz2. 解压 tar -zxvf re…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 游戏表演赛分队(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 游戏表演赛分队(100分) 🌍 评测功能需要订阅专栏后私信联系…

【面试题】MySQL常见面试题总结

备战实习&#xff0c;会定期给大家整理常考的面试题&#xff0c;大家一起加油&#xff01; &#x1f3af; 系列文章目录 【面试题】面试题分享之JVM篇【面试题】面试题分享之Java并发篇【面试题】面试题分享之Java集合篇&#xff08;三&#xff09; 注意&#xff1a;文章若有错…

Cocos Creator,Youtube 小游戏!

YouTube 官方前段时间发布了一则重磅通知&#xff0c;宣布平台旗下小游戏功能 Youtube Playables 正式登录全平台&#xff08;安卓、iOS、网页&#xff09;&#xff0c;并内置了数十款精选小游戏。 Youtube Playables 入口&#xff1a; https://www.youtube.com/playables Coco…

RK3568平台(input篇)输入设备应用编程

一.输入设备介绍 输入设备其实就是能够产生输入事件的设备就称为输入设备&#xff0c;常见的输入设备包括鼠标、键盘、触摸屏、按钮等等&#xff0c;它们都能够产生输入事件&#xff0c;产生输入数据给计算机系统。 对于输入设备的应用编程其主要是获取输入设备上报的数据、输…

【Pandas驯化-04】Pandas中drop_duplicates、describe、翻转操作

【Pandas驯化-04】Pandas中drop_duplicates、describe、翻转操作 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取 微信公…

SAP实施方法论的变化

SAP 的实施方法论 ASAP&#xff0c;在SAP进入 S/4 HANA时&#xff0c;不知不觉改了意思。 原来叫Accelerate SAP&#xff0c;现在叫Activate SAP &#xff0c;毕竟存量SAP太多&#xff0c;大部分用户并非象十多年前一样新实施SAP&#xff0c;而是在老的Sap R/3 &#xff0c;MyS…

简单的基于小波变换的图像压缩(Python)

2023 沃尔夫数学奖得主&#xff0c;给了杜克大学的Ingrid Daubechies&#xff08;多贝西&#xff09;教授 以色列沃尔夫基金会理事会成员 Michael Lin 教授在周二宣布: “Ingrid Daubechies is awarded the Wolf Prize for her work in the creation and development of wavel…

QT 5.14.2 应用程序打包

我们可以直接通过开发工具预览我们的程序。但是当要把开发好的程序给别人使用的时候&#xff0c;我们就需要把程序打包成可执行的exe&#xff0c;然后把这个exe文件和其他相关的文件一起发给别人&#xff0c;这样别人就可以使用了。 一、生成可独立运行的exe (一)、编译程序的…

01 基础入门 编写你的第一个 Go 语言程序

从这节课开始&#xff0c;我会带你走进 Go 语言的世界。我会用通俗易懂的语言&#xff0c;介绍 Go 语言的各个知识点&#xff0c;让你可以从零开始逐步学习&#xff0c;再深入它的世界。不管你以前是否接触过 Go 语言&#xff0c;都可以从这个专栏中受益。 现在&#xff0c;让…

TVBOX 最新版下载+视频源教程

下载链接 wx 搜索 Geek 前端 发送电视资源进行获取 操作教程

【论文复现|智能算法改进】基于多策略融合灰狼算法的移动机器人路径规划

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】灰狼算法&#xff08;GWO&#xff09;原理及实现 2.改进点 混沌反向学习策略 融合Logistic混沌映射和Tent混沌映射生成Logistic-Tent复合混沌映射: Z i 1 { ( r Z i ( 1 − Z i ) ( 4 −…