JVM 调试命令

本文详细介绍Java性能监控工具,如jps、jinfo、jmap、jhat、jstat、jstack的功能及使用方法,帮助开发者理解如何通过这些工具监控和优化Java应用程序的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、需要注意的重点信息

新生代对象增长的速率

Young GC的触发频率

Young GC的耗时

每次Young GC过后有多少对象是存活下载的

每次Young GC过后有多少对象进入老年代

老年代对象增长的速率

Full GC的触发频率

Full GC的耗时

2、jps

显示指定系统内所有的HotSpot虚拟机进程

jps可以通过RMI协议查询开启RMI服务的进程虚拟机进程状态,hostid为RMI注册表中注册的主机名。

-q:只输出LVMID,省略主类的名称

-m:输出虚拟机进程启动时传递给主类main()函数的参数

-l:输出主类的全名,如果进程执行的是Jar包,输出Jar路径

-v:输出虚拟机进程启动时的JVM参数

3、jinfo

显示虚拟机配置信息

jinfo的作用是实时地查看和调整虚拟机各项参数

jinfo [option] <pid> 连接到正在运行的进程

jinfo [option] <executable <core> 连接到核心文件

jinfo [option] [server_id@]<remote server IP or hostname> 连接到远程调试服务器

<option>

-flag <name> 打印已命名的VM标志的值

-flag [+|-]<name> 启用或禁用命名的VM标志

-flag <name>=<value> 将命名的VM标志设置为给定值

-flags 打印虚拟机标志

-sysprops 打印Java系统属性

<no option> 打印以上两项

-h | -help 打印帮助信息

4、jmap

生成虚拟机的内存转储快照(headdump文件)

jmap [option] <pid> 连接到正在运行的进程

jmap [option] <executable <core> 连接到核心文件

jmap [option] [server_id@]<remote server IP or hostname> 连接到远程调试服务器

<option>

<none> 打印与Solaris pmap相同的信息

-heap 打印java堆概要信息

-histo[:live] 打印Java对象堆的直方图;如果指定了“Live”子选项,只对实况对象进行计数

-clstats 打印类加载器统计信息

-finalizerinfo 打印等待完成的对象的信息

-dump:<dump-options> 将java进程堆内内存中各个class实例的详细信息以二进制格式转储选项中转储Java堆

-h | -help 打印帮助信息

-J<flag> 将<flag>直接传递到运行时系统

5、jhat

jhat与jmap搭配使用,分析生成的堆转储快照。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查看。

6、jstat

收集HotSpot虚拟机各方面的运行数据

jstat是用于监视虚拟机各种运行状态信息的命令行工具。

jstat -help|-options

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

定义

<option> option的一个选择参数

<vmid> 虚拟机标识符。vmid可以采用以下形式:<lvmid>[@<hostname>[:<port>]]

<lvmid>是目标Java虚拟机的本地VM标识符,通常是进程ID;

<host name>是运行目标Java虚拟机的主机的名称;

<port>是目标主机上rmi注册的端口号。

<lines> 标题行之间的样本数

<interval> 采样间隔。可以采用一下形式:<n>["ms"|"s"]

<n>是一个整数,后缀将单位指定为毫秒(“ms”)或秒(“s”),默认单位为“ms”。

<count> 终止前要采集的样本数。

-J<flag> 将<flag>直接传递到运行时系统。

<option>

-class 监视类装载、卸载数量、总空间以及类装载所消耗的时间

-gc 监视Java堆状况,包括Eden、survivor、老年代、永久代等容量、已用空间、GC时间合计等信息

-gccapacity 监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到最大、最小空间

-gcutil 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比

-gccause 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因

-gcnew 监视新生代GC状况

-gcnewcapacity 监视内容与-gcnew基本相同,但输出主要关注使用到的最大、最小空间

-gcold 监视老年代GC状态

-gcoldcapacity 监视内容与-gcold基本相同,但输出主要关注使用到的最大、最小空间

-gcpermcapacity 输出永久代使用到的最大、最小空间

-compiler 输出JIT编译器编译过的方法、耗时等信息

-printcompilation 输入已经被JIT编译过的方法

列名介绍

E 年轻代中Eden(伊甸园)已使用的占当前容量百分比

O 年老代已使用的占当前容量百分比

M 元空间(MetaspaceSize)已使用的占当前容量百分比

P 持久代已使用的占当前容量百分比 (这个参数在JDK 1.8之前才有效)

S0 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

S1 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

S0C 年轻代中第一个survivor(幸存区)的容量

S1C 年轻代中第二个survivor(幸存区)的容量

S0U 年轻代中第一个survivor(幸存区)目前已使用空间

S1U 年轻代中第二个survivor(幸存区)目前已使用空间

EC 年轻代中Eden(伊甸园)的容量

EU 年轻代中Eden(伊甸园)目前已使用空间

OC 年老代的容量

OU 年老代目前已使用空间

MC 当前元数据空间大小

MU 当前元数据空间已使用大小

CCS 压缩使用比例

CCSC 当前压缩类空间大小

CCSU 当前压缩类空间已使用大小

YGC 年轻代垃圾回收次数

YGCT 年轻代垃圾回收消耗时间

FGC 老年代GC次数

FGCT 老年代垃圾回收消耗时间

TT 持有次数限制

MTT 最大持有次数限制

GCT 垃圾回收消耗总时间

DSS 当前需要survivor(幸存区)的容量 (字节)(Eden区已满)

NGCMN 年轻代(young)中初始化(最小)的大小

NGCMX 年轻代(young)的最大容量

NGC 年轻代(young)中当前的容量

OGCMN 年老代中初始化(最小)的大小

OGCMX 年老代的最大容量

OGC 年老代当前新生成的容量

MCMN 最小元数据容量

MCMX 最大元数据容量

CCSMN 最小压缩类空间大小

CCSMX 最大压缩类空间大小

7、jstack

显示虚拟机的线程快照

jstack [-l] <pid> 连接到正在运行的进程

jstack -F [-m] [-l] <pid> 连接到挂起的进程

jstack [-m] [-l] <executable> <core> 连接到核心文件

jstack [-m] [-l] [server_id@]<remote server IP or hostname> 连接到远程调试服务器

option

-F 强制线程转储。当jstack<pid>不响应时使用(进程挂起)

-m 打印Java和本机帧,所有线程(混合模式)

-l 除堆栈外,显示关于锁的附加信息

-h or -help to print this help message

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值