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

2023-12-13 05:51:25

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

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

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?#用于查看老年代及持久代垃圾收集的情况

jinfo:Java 配置信息工具

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

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

?#?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

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

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

jstack:Java 堆栈跟踪工具

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

最后总结一下:

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

文章来源:https://blog.csdn.net/davice_li/article/details/134944462
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。