性能密切关注:使用带命令制定JVM内核

jps:虚拟机进程状况工具方式

性能密切关注:使用带命令制定JVM内核_第1张图片

我们通常使用 jps 来列出正在运行的进程,jps 可以显示虚拟机执行的主类以及进程的虚拟机 ID“LVMID”。jps 是我们使用频率最高的工具,其他工具都需要依赖 jps 查询到的 LVMID 来进行下一步操作

性能密切关注:使用带命令制定JVM内核_第2张图片

jstat:虚拟机统计信息监视工具

https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html

jstat 可以监控 JVM 中的类加载信息、内存使用情况、GC 情况、JIT 信息等。

#先通过jps获取到java进程号
jps 
#用于查看JVM中堆的垃圾收集情况的统计
jstat -gc 16400 200 3    代表每 200 毫秒执行一次 jstat -gc 命令,连续执行 3 次。
查询出来的这几个参数的含义:
S0、S1:Survivor0、Survivor1 幸存者区
E:新生代区
O:老年区
P:永久代
YGC:MinorGC
YGCT:MinorGC 的耗时
FGC:FullGC
FGCT:FullGC 总耗时
GCT:GCTime,意思是 GC 总耗时
jstat -class xxxx #统计JVM中加载的类的数量与size
jstat -compiler xxxx #用于查看HotSpot中即时编译器编译情况的统计
jstat -gccapacity xxxx #用于查看新生代、老生代及持久代的存储容量情况
jstat -gcmetacapacity xxxx #显示元数据空间的大小
jstat -gcnew xxxx #用于查看新生代垃圾收集的情况
jstat -gcnewcapacity xxxx #用于查看新生代存储容量的情况
jstat -gcold xxxx #用于查看老年代及持久代垃圾收集的情况

性能密切关注:使用带命令制定JVM内核_第3张图片

jinfo:Java 配置信息工具

https://docs.oracle.com/en/java/javase/11/tools/jinfo.html#GUID-69246B58-28C4-477D-B375-278F5F9830A5

实时查看和修改 JVM 配置参数:查看虚拟机配置参数信息,也可用于调整虚拟机的配置参数。

性能密切关注:使用带命令制定JVM内核_第4张图片

 # jinfo -flag name PID——查看某个 java 进程的具体参数的值

# jinfo -flags PID——查看曾经赋过值的一些参数

# jinfo -sysprops PID——可以查得由System.getProperties()取得的参数

jmap:Java 内存映像工具

jmap 不仅可以获取 dump 文件,还可以查询永久代、堆空间使用率、GC 收集器等信息。

# 查看堆信息
jmap -heap xxxx
# dump 堆到文件,format 指定输出格式,live 指明是活着的对象,file 指定文件名
jmap -dump:live,format=b,file=java.hprof 12204
jmap -histo xxxx > ./log.txt
jmap -histo xxxx  #查看历史生成的实例
jmap -histo:live xxx  #查看当前存活的实例,执行过程中可能会触发一次full gc

性能密切关注:使用带命令制定JVM内核_第5张图片

jhat:虚拟机堆转储快照分析工具

jmap 有一个搭档叫 jhat,jhat 可以分析 jmap 生成的堆转储快照。jhat 生成的 dump 文件结果报告可以直接在浏览器中打开。

jstack:Java 堆栈跟踪工具

jstack 用于生成虚拟机当前时刻的线程快照,也就是“线程 dump”文件。线程快照的意思就是线程当前的堆栈信息,生成线程快照的主要目的通常是为了定位线程阻塞的原因,如死循环、死锁、IO 资源问题等。如果发生线程阻塞,我们可以使用 jstack 来查看线程堆栈,就可以清晰地看到这些线程在后台执行什么任务、wait 什么 IO 资源。

最后总结一下:

遇到线上问题,先用 jps 查一下进程的 LVMID,如果是线程问题则直接去看 jstack,如果是内存溢出的问题可以使用 jmap 配合 jhat,如果想在问题发生前监控一下内存上涨情况可以使用 jstat,并且可以通过 jinfo 看看内存的大小设置等配置信息。

你可能感兴趣的:(软件测试,jvm)