JVM性能优化之JVM调试命令

JVM性能优化之JVM调试


前言

前面文章简单的对JVM进行了简单的讲解,本文来简单讲解一下一些在JVM调试过程中使用到的操作命令。

一、jps

jps是JDK 1.5提供的一个显示当前所有java进程pid的命令,相当于Java版本的ps命令,可以查看Java进程及其相关信息。在windows的CMD或者Linux都可以直接输入命令查看相关信息。

jps [options] [hostid] 

jps有以下参数:

option参数详情
-l显示进程id,显示主类全名或jar路径。
-q显示进程id。
-m显示进程id, 显示JVM启动时传递给main()的参数。
-v显示进程id,显示JVM启动时显示指定的JVM参数。

写一个死循环代码保持测试代码执行中

public static void main(String[] args){
        while (true){
            System.out.println("测试");
        }
    }

使用jps -v命令查看当前代码的JVM参数配置信息。
在这里插入图片描述

二、 jinfo

jinfo是用来查看JVM参数以及动态修改部分JVM参数的命令,也是JDK中自带的。

jinfo [option] <pid> //查看运行中的程序,pid为程序进程号
jinfo [option] <executable <core> //查看javadump文件信息,代码崩溃的时候会产生对应的dump文件
jinfo [option] [server_id@]<remote server IP or hostname> //远程查看服务信息

jinfo有以下参数(不填写默认输出所有的系统属性和参数):

option参数详情
-flag打印指定名称的参数
-flag[+/-]打开或关闭参数
-flag=设置参数
-flags打印所有参数
-sysprops打印系统设置

使用jinfo直接填写上面jps获取的测试代码的进程ID看一下结果:
在这里插入图片描述

三、 jstat

jstat也是JDK自带的JVM查看命令,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,来查看JVM运行时的状态信息,包括内存状态、垃圾回收等。

 jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] //后面两个是间隔时间和查询次数

jstat有以下参数:

option参数详情
-class查看类加载器的信息
-compiler查看JIT编译器的信息
-gc垃圾回收的信息
-gccapacity各垃圾回收代相应的信息
-gcutil垃圾回收主要信息
-gccause垃圾回收主要信息及最近两次垃圾回收的原因
-gcnew新生代垃圾回收信息
-gcnewcapacity新生代与其相应的内存空间信息
-gcold老年代垃圾回收信息
-gcoldcapacity老年代及其相应的内存空间信息
printcompilationHotSpot编译方法统计

使用jstat查看上面代码的垃圾回收信息:
在这里插入图片描述
GC对应信息参照:

代码具体含义
S0Csurvivor0大小
S1Csurvivor1大小
S0Usurvivor0已使用大小
S1Usurvivor1已使用大小
ECEden区大小
EUEden区已使用大小
OC老年代大小
OU老年代已使用大小
MC方法区大小
MU方法区已使用大小
CCSC压缩类空间大小
CCSU压缩类空间已使用大小
YGC年轻代垃圾回收次数
YGCT年轻代垃圾回收消耗时间
FGCFull GC垃圾回收次数
FGCTFull GC垃圾回收消耗时间
GCT垃圾回收消耗总时间

四、 jstack

jstack是用来查看JVM线程快照的命令,线程快照指的是JVM线程正在执行的方法堆栈集合。使用jstack命令可以定
位线程出现长时间卡顿的原因,例如死锁,死循环等。jstack还可以查看程序崩溃时生成的core文件中的stack信
息。

jstack [-l] <pid> 
jstack -F [-m] [-l] <pid>
jstack [-m] [-l] <executable> <core> 
jstack [-m] [-l] [server_id@]<remote server IP or hostname>

jstack参数如下:

option参数详情
-F当使用jstack 无响应时,强制输出线程堆栈。
-m同时输出java堆栈和c/c++堆栈信息(混合模式)
-l除了输出堆栈信息外,还显示关于锁的附加信息

例如我们使用jstack查看上面的死循环代码定位死循环位置:
在这里插入图片描述

五、 jmap

jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

jmap [option] <pid>
jmap [option] <executable <core>
jmap [option] [server_id@]<remote server IP or hostname>

jmap参数如下:

option参数详情
-heap打印堆的摘要信息
-histo[:live]打印堆中的java对象统计信息
-clstats打印类加载器统计信息
-finalizerinfo打印在f-queue中等待执行finalizer方法的对象
-dump:< dump-options >生成java堆的dump文件

例如我们查看堆的信息,只截图了部分,后面还有每个区的大小、使用情况、剩余情况信息:
在这里插入图片描述

六、 jhat

jhat也是jdk内置的工具之一。主要是用来分析dump的命令,jhat内置了应用服务器,可以通过网页查看dump文件分析结果。

 jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>

jhat参数如下:

option参数详情
-stack false关闭对象分配调用堆栈的跟踪
-refs false关闭对象引用的跟踪
-portHTTP服务器端口,默认是7000 -debug : debug级别
-version分析报告版本

例如我们使用jmap -dump:live,file=f://dupm.bin 25736生成示例代码的dump,然后使用jhat分析
在这里插入图片描述
打开7000端口号:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值