jvm常用密令、jvm性能优化、jvm性能检测、Java jstat密令使用、Java自带工具、Java jmap使用

news2024/11/16 1:37:08

1.jps是Java虚拟机的进程状态工具,用于列出正在运行的Java进程

jps命令的使用:cmd打开直接jps

1.1不带参数:
jps
默认情况下,列出所有正在运行的 Java 进程的进程 ID 和主类名。

1.2 -l:显示完整的主类名或 JAR 文件路径。
jps -l
这将显示完整的主类名或 JAR 文件路径,而不仅仅是主类名。

1.3 -m:显示传递给主类 main 方法的参数。
jps -m
这会显示传递给 Java 主类 main 方法的参数。

1.4 -v:显示传递给 JVM 的参数。
jps -v
这会显示传递给 Java 虚拟机的参数,包括堆大小、GC 策略等。

1.5 -q:仅显示进程 ID,不显示类名或 JAR 文件路径。
jps -q
这将只显示 Java 进程的进程 ID,适合用于脚本处理或者需要仅获取 ID 的情况。

1.6 -Joption:传递参数给 jps 命令本身运行的 JVM。
jps -J-Xmx1024m
这会将 -Xmx1024m 参数传递给 jps 命令本身运行的 JVM。

jps -lvm 等价于Linux的ps aux | grep java

2.jstat是Java虚拟机统计监视工具,用于监视Java虚拟机的内存、类装载、垃圾回收等统计信息,下面是使用:

jstat [options] <vmid> [<interval> [<count>]]

  • optionsjstat命令的选项,用于指定要监视的内容,如类加载、垃圾回收等。
  • vmid:Java虚拟机进程的ID,即使用jps命令获取到的进程ID。
  • interval:可选参数,指定两次输出之间的时间间隔(以毫秒为单位),默认为1000毫秒。
  • count:可选参数,指定输出次数,如果不指定则表示持续输出。

下面是常用参数:

类加载统计:
-class:显示类加载、卸载信息。
-gcnew:显示新生代 GC 统计信息。
-gcold:显示老年代 GC 统计信息。
-gccapacity:显示堆容量以及已用空间统计。
GC 相关:
-gc 或 -gcutil:显示 GC 相关信息,包括各区域的使用情况、GC 时间等。
-gccause:显示 GC 的原因,包括各种 GC 事件的发生次数和持续时间。
垃圾收集器相关:-gcnew、-gcnewcapacity、-gcold、-gcoldcapacity:分别显示新生代和老年代的 GC 统计信息和容量信息。
编译统计:-compiler:显示 JIT 编译器统计信息。
类装载统计:-class:显示类装载、卸载统计信息。
JIT 编译器统计:-compiler:显示 JIT 编译器统计信息。
线程统计:-thread:显示线程统计信息,如线程数量、状态等。
IO 统计:-gc:显示 IO 统计信息,如文件打开数、读写字节数等。
系统统计:-gccause:显示系统相关的统计信息,如系统时间、CPU 使用率等

示例:

下面是输出中各列的含义:

  • S0C:幸存者区0的容量(KB)
  • S1C:幸存者区1的容量(KB)
  • S0U:幸存者区0的使用量(KB)
  • S1U:幸存者区1的使用量(KB)
  • EC:伊甸园区的容量(KB)
  • EU:伊甸园区的使用量(KB)
  • OC:老年代的容量(KB)
  • OU:老年代的使用量(KB)
  • MC:元空间(Metaspace)的容量(KB)
  • MU:元空间的使用量(KB)
  • CCSC:压缩类空间的容量(KB)
  • CCSU:压缩类空间的使用量(KB)
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收总耗时(秒)
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收总耗时(秒)
  • GCT:垃圾回收总耗时(秒)

  • Loaded: 自JVM启动以来加载的类的数量。
  • Bytes: 自JVM启动以来加载的类的总大小(以KB计)。
  • Unloaded: 自JVM启动以来卸载的类的数量。
  • Bytes: 自JVM启动以来卸载的类的总大小(以KB计)。
  • Time: 自JVM启动或上次重置统计信息以来的时间(以秒计)。

S0: 第一个幸存区(Survivor Space 0)的使用比例(%)。
S1: 第二个幸存区的使用比例(%)。
E: Eden区的使用比例(%)。
O: 老年代(Old Generation)的使用比例(%)。
M: 元空间(Metaspace)的使用比例(%)。
CCS: 压缩类空间的使用比例(%)。
YGC: 自JVM启动以来Young Generation垃圾收集的次数。
YGCT: 自JVM启动以来Young Generation垃圾收集所用的时间(秒)。
FGC: 自JVM启动以来Full GC(Full Garbage Collection)的次数。
FGCT: 自JVM启动以来Full GC所用的时间(秒)。
GCT: 自JVM启动以来总的垃圾收集时间(秒)。
LGCC: 上次GC的原因(Last GC Cause)。
GCC: 上次GC的触发事件(GC Cause)。

3.jmap:用于生成堆转储文件(Heap Dump)或查看堆内存的命令行工具

3.1生成堆转储文件:jmap -dump:format=b,file=heapdump.hprof <pid>

生成一个堆转储文件(以 heapdump.hprof 命名),该文件包含指定 Java 进程 <pid> 的堆内存信息

3.2查看堆内存使用情况:jmap -heap <pid>

显示指定 Java 进程 <pid> 的堆内存配置和使用情况

例:jmap -heap 27796

堆配置信息:
最小堆空闲比率:0
最大堆空闲比率:100
最大堆大小:4211081216 字节 (约4016.0MB)
新生代大小:88080384 字节 (约84.0MB)
最大新生代大小:1403518976 字节 (约1338.5MB)
老年代大小:176160768 字节 (约168.0MB)
新生代比率:2
幸存者区比率:8
元空间大小:21807104 字节 (约20.796875MB)
压缩类空间大小:1073741824 字节 (约1024.0MB)
最大元空间大小:17592186044415 MB
G1 堆区大小:0 字节 (0.0MB)
堆使用情况:
PS 年轻代:
Eden 区:
容量 = 1054343168 字节 (约1005.5MB)
已使用 = 973629136 字节 (约928.525MB)
空闲 = 80714032 字节 (约76.974MB)
使用率 = 92.34%
From 区:
容量 = 68681728 字节 (约65.5MB)
已使用 = 32579448 字节 (约31.07MB)
空闲 = 36102280 字节 (约34.43MB)
使用率 = 47.44%
To 区:
容量 = 117440512 字节 (约112.0MB)
已使用 = 0 字节 (0.0MB)
空闲 = 117440512 字节 (约112.0MB)
使用率 = 0.0%
PS 老年代:
容量 = 424148992 字节 (约404.5MB)
已使用 = 149173344 字节 (约142.26MB)
空闲 = 274975648 字节 (约262.24MB)
使用率 = 35.17%
其他信息:
已内部化的字符串数:45039
已使用的内部化字符串总字节数:4570928

3.3查看内存映像详细信息:jmap -histo[:live] <pid>

打印指定 Java 进程 <pid> 的堆中对象的统计信息。
:live 选项只统计活动对象(即尚未被垃圾回收器回收的对象)

例:jmap -histo:live 27796

3.4查看类加载器信息:jmap -clstats <pid>

打印指定 Java 进程 <pid> 中的类加载器信息,包括每个类加载器加载的类数量和内存使用情况

例:jmap -clstats 27796

3.5打印 Shared Object 内存映像:jmap -finalizerinfo <pid>

打印正在等待 Finalizer 线程执行的对象信息

例:jmap -finalizerinfo 27796

调试器成功附加。 检测到服务器编译器。 JVM 版本是 25.311-b11 待终结的对象数量:0

3.6查看 Java 进程的运行时参数:jmap -flags <pid>

打印 Java 进程 <pid> 的运行时参数

3.7查看 GC 状态:jmap -GC <pid>

4.jstack:jstack 是 Java 的一个诊断工具,用于生成 Java 进程的线程转储信息。它可以用来查看 Java 进程中所有线程的堆栈跟踪,帮助分析线程间的互相调用关系以及可能的死锁情况。以下是一些常用的 jstack 命令及其说明

4.1生成线程转储:jstack <pid>

生成 Java 进程 <pid> 的线程转储信息,并将其输出到控制台。这会列出每个线程的堆栈跟踪信息,包括线程状态、调用栈等

4.2生成线程转储到文件:jstack -F -l <pid> > threaddump.txt

使用 -F 参数可以在 Java 进程响应慢或者已经死锁的情况下强制生成线程转储。

-l 参数会输出更详细的本地变量信息。

将转储信息重定向到 threaddump.txt 文件中。

4.3远程连接并生成线程转储:jstack -l <hostname>:<port>

对指定主机 <hostname> 和端口 <port> 上运行的 Java 应用程序生成线程转储信息。

4.4查看线程信息:jstack -m <pid>

输出 Java 进程 <pid> 中所有线程的 Java 和本地方法堆栈信息。

4.5死锁检测:jstack -l <pid> | grep deadlock 或 jstack -l <pid> | findstr deadlock

使用 grep 命令结合 jstack 的输出来检测是否存在死锁线程。

5.jcmd:用于向正在运行的Java进程发送诊断命令的命令行工具,功能包括生成堆转储、查看线程堆栈、GC日志等

5.1.列出当前正在运行的 Java 进程:jcmd -l

列出当前系统上正在运行的 Java 进程的 PID 和名称

5.2生成线程转储:jcmd <pid> Thread.print

生成 Java 进程 <pid> 的线程转储信息,类似于 jstack <pid> 命令

5.3打印 JVM 运行时参数:jcmd <pid> VM.flags

打印 Java 进程 <pid> 的 JVM 运行时参数。

jcmd 27796 VM.flags

5.4查看 Java 进程的详细信息:jcmd <pid> VM.version

打印 Java 进程 <pid> 的 Java 版本信息和 JVM 版本信息

5.5执行 JVM 命令:jcmd <pid> <command>

执行特定的 JVM 命令或者诊断命令,例如 GC.class_statsThread.print 等。具体可用的命令取决于 JVM 的实现版本和配置

5.6执行 Java Flight Recorder(JFR)操作:

jcmd <pid> JFR.start

jcmd <pid> JFR.stop

启动或停止 Java Flight Recorder(JFR)事件记录器,用于实时监控和记录 Java 应用程序的性能信息

5.7执行自定义的诊断命令:jcmd <pid> PerfCounter.print

执行自定义的诊断命令,例如打印性能计数器的当前值

jcmd 27796 PerfCounter.print

5.8使用 jcmd 的插件:jcmd <pid> help

打印出可用命令和插件的帮助信息,列出每个命令的用法和选项

6.jinfoJ: VM信息查看工具,查看VM的各种配置信息,例如系统属性、堆大小、GC 策略等

6.1查看 Java 进程的所有系统属性:jinfo -sysprops <pid>

显示 Java 进程 <pid> 的所有系统属性,包括通过 -D 参数设置的系统属性和默认系统属性

jinfo -sysprops 27796

6.2查看 Java 进程的 JVM 参数:jinfo -flags <pid>

显示 Java 进程 <pid> 使用的 JVM 参数,包括启动时显式设置的参数和默认的 JVM 参数

jinfo -flags 27796

6.3查看特定 JVM 参数的值:jinfo -flag <flagname> <pid>

显示 Java 进程 <pid> 中特定 JVM 参数 <flagname> 的当前值。

-flags:列出当前 Java 进程的所有 JVM 参数和标志。
-flag <flagname>:查看指定 <flagname> 的当前设置。
-flag [+|-]<flagname>:设置或清除指定 <flagname> 的标志

例如:jinfo -flag UseG1GC 27796

这将显示 Java 进程 ID 为 12345 的 JVM 参数 UseG1GC 的值

6.4动态修改 JVM 参数:jinfo -flag [+|-]<flagname> <pid>

在运行时动态修改 Java 进程 <pid> 中的 JVM 参数 <flagname> 的值。

例如:jinfo -flag +PrintGCDetails 12345

这将在 Java 进程 ID 为 12345 的 JVM 中启用 GC 详细日志输出

7.Java VisualVM 确实是一个综合的IVM监控工具,查看VM基本情况、做栈和堆转储、做内存和CPUprofiling等

7.1实时监控和分析:提供实时的 CPU 使用率、堆内存使用情况、线程活动等数据,通过图形化界面直观展示。
7.2堆和内存分析:可以生成和分析堆转储(Heap Dump),帮助开发人员诊断内存泄漏和内存使用问题。
7.3线程分析:显示运行中的线程状态、堆栈信息,支持死锁检测和线程分析。
7.4性能分析:提供性能分析工具(Profiler),帮助定位性能瓶颈和优化代码。
7.5JVM 参数调优:允许动态修改 JVM 参数,如堆大小、GC 策略等,以及执行 Java Flight Recorder(JFR)事件记录器。
7.6远程监控:支持通过 JMX 协议远程连接和监控 Java 应用程序。
7.7插件支持:可以安装各种插件扩展功能,如 Visual GC 插件用于详细的垃圾回收分析等。
7.8多平台支持:可以在 Windows、Linux 和 macOS 等操作系统上运行,并提供一致的监控和分析功能。

8.jconsole:JMX兼容的图形工具,用于监控IVM基本情况,查看MBean

主要特点:
8.1实时监控:JConsole 允许你实时监控 Java 应用程序的性能指标,如 CPU 使用率、堆内存使用情况、线程数量等。
8.2线程监控:可以查看 Java 应用程序中运行的线程及其状态,包括堵塞状态、等待状态等,有助于诊断线程相关的性能问题。
8.3堆内存分析:提供堆内存使用情况的实时数据,包括堆的大小、已使用空间、对象数量等信息,帮助开发人员了解应用程序的内存消耗情况。
8.4垃圾回收监控:可以监控 Java 应用程序的垃圾回收活动,包括不同代的内存使用情况、GC 次数和效率,帮助优化内存管理策略。
8.5类加载信息:提供 Java 应用程序中加载的类的详细信息,包括类加载器、已加载类的数量和类加载情况的历史统计。
8.6MBean 查看与操作:JConsole 允许你浏览和操作注册在 MBean 服务器上的 MBean,可以查看和修改应用程序的运行时配置和状态。


如何使用 JConsole:
1.启动 JConsole:JConsole 是 JDK 自带的工具,可以在 JDK 的 bin 目录下找到 jconsole.exe(Windows)或 jconsole(Linux/Mac),直接运行即可。
2.连接到 Java 应用程序:运行 JConsole 后,选择要监视的 Java 应用程序进程,通常是在“本地进程”选项卡下可以找到。也可以手动连接到远程服务器上运行的 Java 应用程序。
3.监控和分析:在 JConsole 的不同选项卡中,可以查看各种性能指标和资源使用情况的实时数据。可以通过这些数据来分析应用程序的运行状态,并进行性能调优和故障排查。
4导出数据:JConsole 允许将监控到的数据导出为 CSV 文件,以便后续分析和报告。

JConsole 提供了一个简单而强大的方式来监视和管理 Java 应用程序,尤其适合在开发和测试阶段使用,以及在生产环境中进行基本的性能监控和故障诊断。

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

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

相关文章

《故障复盘 · 数据库连接异常关闭》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

不开放80或443端口也能申请IP SSL证书!

在申请SSL/HTTPS证书时&#xff0c;如果不方便使用域名或者没有域名&#xff0c;就要申请一种特殊的SSL证书——IP SSL证书。但是一般的IP地址证书签发过程中&#xff0c;需要短暂开放80或者443端口才能签发成功。那么问题来了&#xff0c;有的实在不能开放80或者443端口&#…

keil中GD32 MCU IAP中APP的存储地址如何设置?

前面和大家聊过什么是IAP&#xff0c;那么IAP中APP的存储地址该如何设置呢&#xff1f; 以keil为例&#xff0c;打开工程的option选项卡&#xff1a; 将IROM1中的地址改为你想要保存的位置&#xff0c;比如0x08008000开始的位置&#xff1a; 这样通过keil烧录&#xff0c;程序…

记录|.NET上位机开发和PLC通信的实现

本文记录源自&#xff1a;B站视频 实验结果&#xff1a;跟视频做下来是没有问题的。能运行。 目录 前言一、项目Step1. 创建项目Step2. 创建动态图片展示Step3. 创建图片型按钮Step4. 创建下拉框Step1~4的效果展示Step5. 编程实体类操作类Main函数 Step1~5的效果展示Main函数 最…

[Python学习篇] Python PyMysql

什么是PyMysql PyMysql是一个纯 Python 实现的 MySQL 客户端库&#xff0c;允许你在 Python 程序中与 MySQL 数据库进行交互。 安装PyMysql PyMysql地址&#xff1a;https://pypi.org/project/PyMySQL/ pip install pymysql 使用PyMysql 连接mysql import pymysql# 数据库连…

数据库redis命令作业九

1、安装redis&#xff0c;启动客户端、验证。 2、string类型数据的命令操作&#xff1a; &#xff08;1&#xff09; 设置键值&#xff1a; &#xff08;2&#xff09; 读取键值&#xff1a; &#xff08;3&#xff09; 数值类型自增1&#xff1a; &#xff08;4&#xff09; 数…

【单片机毕业设计选题24064】-基于阿里云的鱼塘水质检测系统

系统功能: 主控为STM32F103C8T6&#xff0c;通过PH值传感器、浑浊度传感器、温度传感器采集各项水质数据&#xff0c;系统可设定各参数 的阈值&#xff0c;超过设定的阈值将通过蜂鸣器响来提醒用户做出措施&#xff0c;同时通过ESP-12F WIFI模块将设备连接阿里云 物联网平台…

信通院全景图发布 比瓴科技领跑软件供应链安全,多领域覆盖数字安全服务

近日&#xff0c;中国信息通信研究院在2024全球数字经济大会—数字安全生态建设专题论坛正式发布首期《数字安全护航技术能力全景图》&#xff08;以下简称全景图&#xff09;。 比瓴科技入选软件供应链安全赛道“开发流程安全管控、交互式安全测试、静态安全测试、软件成分分…

rtf是什么格式的文件?rtf格式和word的区别是什么?

RTF是什么格式的文件? RTF&#xff08;富文本格式&#xff0c;Rich Text Format&#xff09;和Word文档&#xff08;以.doc和.docx为扩展名的Microsoft Word文档&#xff09;是两种常用的文本文件格式。它们在文件结构、兼容性、功能和使用场景等方面存在一些显著差异。 比如…

泰迪智能科技江西大数据实验室成功案例介绍说明

高校大数据实验室作为作为支撑高校人培方案实施的核心设施&#xff0c;实验室的建设一定要与学科建设、人才培养充分融合&#xff0c;是一个包含物理空间硬件资源软件资源课程内容的系统化工程。高校在实验室规划过程中&#xff0c;第一要务就是从学科定位出发、结合学校的特色…

ASP.NET MVC-制作可排序的表格组件-PagedList版

环境&#xff1a; win10 参考&#xff1a; 学习ASP.NET MVC(十一)——分页 - DotNet菜园 - 博客园 https://www.cnblogs.com/chillsrc/p/6554697.html ASP.NET MVCEF框架实现分页_ef 异步分页-CSDN博客 https://blog.csdn.net/qq_40052237/article/details/106599528 本文略去…

分布式IO系统BL201 Profinet耦合器

BL201耦合器是一个数据采集和控制系统&#xff0c;基于强大的32 位微处理器设计&#xff0c;采用Linux操作系统&#xff0c;是一种模块化的分布式I/O系统。该系统由3部分组成&#xff1a;现场总线耦合器和各种类型的&#xff08;数字和模拟信号以及特殊功能&#xff09;I/O模块…

部署k8s 1.28.9版本

继上篇通过vagrant与virtualBox实现虚拟机的安装。笔者已经将原有的vmware版本的虚拟机卸载掉了。这个场景下&#xff0c;需要重新安装k8s 相关组件。由于之前写的一篇文章本身也没有截图。只有命令。所以趁着现在。写一篇&#xff0c;完整版带截图的步骤。现在行业这么卷。离…

C#与倍福Plc通信——使用仿真软件模拟倍福PLC运行

前言 我们在编写上位机与倍福PLC通信的过程中,有时候我们没有真实的Plc,但是我们又想提前测试与倍福PLC的通信,那么这个时候我们就可以使用倍福的仿真软件模拟PLC,然后我们上位机就可以与仿真PLC进行通信了,下面进行详细介绍: 1、下载并安装倍福PLC编程软件TwinCAT 安…

Uniapp自定义动态加载组件(2024.7更新)

1.本次介绍如何使用uniapp实现自定义动态加载Loading的组件&#xff0c;可以gif格式&#xff0c;也可以mp4格式等; 编写自定义Loading组件(CustomLoader.vue)&#xff1b;组件中含有“动态接收图片路径”&#xff0c;“10秒超时未false则自动断开关闭Loading”&#xff1b;在全…

基于STC8H4K64TL单片机的触摸功能调试

基于STC8H4K64TL单片机的触摸功能调试 STC8H4K64TL单片机介绍STC8H4K64TL单片机管脚图(48个引脚)STC8H4K64TL单片机串口仿真与串口通信STC8H4K64TL单片机管脚图(32个引脚)STC8H4K64TL单片机管脚图(20个引脚)STC8H系列单片机管脚说明STC8H系列单片机I/O口STC8H系列单片机I…

在MoneyPrinterPlus中使用本地chatTTS语音模型

之前MoneyPrinterPlus在批量混剪,一键AI生成视频这些功能上的语音合成功能都用的是云厂商的语音服务&#xff0c;比阿里云&#xff0c;腾讯云和微软云。 云厂商虽然提供了优质的语音服务&#xff0c;但是用起来还是要收费。 为了各位小伙伴的钱包&#xff0c;现在特意给Money…

基于二次规划优化的OFDM系统PAPR抑制算法的matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于二次规划优化的OFDM系统PAPR抑制算法的matlab仿真. 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 &#xff08;完整程序运行后无水印&#xff09;…

【Springboot】新增profile环境配置应用启动失败

RT 最近接手了一个新的项目&#xff0c;为了不污染别人的环境&#xff0c;我新增了一个自己的环境配置。结果&#xff0c;在启动的时候总是失败&#xff0c;就算是反复mvn clean install也是无效。 问题现象 卡住无法进行下一步 解决思路 由于之前都是能启动的&#xff0c…

zookeeper+kafka的消息队列

zookeeperKafka 两个都是消息队列的工具 消息队列 出现原因&#xff1a;生产者产生的消息与消费者处理消息的效率相差很大。为了避免出现数据丢失而设立的中间件。 在消息的生产者与消费之间设置一个系统&#xff0c;负责缓存生产者与消费者之间的消息的缓存。将消息排序。 优…