01

jps

Jps:Lists the instrumented Java Virtual Machines (JVMs) on the target system. This command is experimental and unsupported.(列出目标系统上插入指令的Java虚拟机(JVM)。此命令是实验性的,不受支持。)

用法:

jps [ options ] [ hostid ] //hostid不填默认本机

Option:

-q:抑制传递给main方法的类名、JAR文件名和参数的输出,只生成一个列表本地JVM标识符。

-m: 显示传递给主方法的参数。对于嵌入式JVM,输出可能为空。

-l: 显示应用程序主类的完整包名或应用程序JAR文件的完整路径名。

-v: 显示传递给JVM的参数。

实战演练:

jps -l

jvisualvm 监控本地dubbo服务 jvm监控命令_ci

02

Jstat

jstat:Monitors Java Virtual Machine (JVM) statistics. This command is experimental and unsupported.(监视Java虚拟机(JVM)统计信息。此命令是实验性的,不受支持。)

用法:

jstat [ generalOption | outputOptions vmid [ interval[s|ms] [ count ] ]

Option:

jvisualvm 监控本地dubbo服务 jvm监控命令_Java_02

jvisualvm 监控本地dubbo服务 jvm监控命令_JVM_03

实战案例

jstat -gc 85703 5000 1000

jvisualvm 监控本地dubbo服务 jvm监控命令_ci_04

-class:类加载统计

-compiler:Java HotSpot VM及时编译统计

-gccapacity:内存池生成和空间容量。

-gccause:此选项显示与-gcutil选项相同的垃圾收集统计信息摘要,但包括上一个垃圾收集事件和(如果适用)当前垃圾收集事件。除了柱子此选项为-gcutil列出,它将添加以下列。

-gcnew:新一代统计。

-gcnewcapacity:新生代空间统计。

-gcold:老年代和元空间行为统计。

-gcoldcapacity:老年代空间统计。

-gcmetacapacity:Metaspace空间统计。

-gcutil:垃圾收集统计信息摘要。

-printcompilation:Java HotSpot VM编译方法统计。

03

jmap

jmap:Prints shared object memory maps or heap memory details for a process, core file, or remote debug server. This command is experimental and unsupported.(打印进程、核心文件或远程调试服务器的共享对象内存映射或堆内存详细信息。此命令是实验性的,不受支持。)

用法:

jmap [ options ] pid
Option:
-dump:[live,] format=b, file=filename

将hprof二进制格式的Java堆转储到filename。live子选项是可选的,但是在指定时,只有

堆中的活动对象被转储。要浏览堆转储,可以使用jhat(1)命令读取生成的文件。

-finalizerinfo

打印有关正在等待完成的对象的信息。

-heap

打印所使用的垃圾回收、头部配置和各代堆使用情况的堆摘要。在此外,还打印了内部字符串的数量和大小。

-histo[:live]

打印堆的柱状图。对于每个Java类,对象的数量、内存大小(以字节为单位)以及将打印限定类名。JVM内部类名以星号(*)前缀打印。如果现场指定子选项,则只计算活动对象。

-clstats

打印Java堆的类装入器统计信息。对于每个类装入器,它的名称、活动程度、地址、父级

类加载器,以及它所加载的类的数量和大小被打印出来。

扩展

用mat工具分析内存溢出情况

导入后选择Histogram

jvisualvm 监控本地dubbo服务 jvm监控命令_Java_05

堆中java类会从大到小排列

jvisualvm 监控本地dubbo服务 jvm监控命令_JVM_06

选中你要查看的类,点击右键选择List Objects-->with incoming references

jvisualvm 监控本地dubbo服务 jvm监控命令_ci_07

可以看出gc root的调用链,定位问题出处。当然也要结合实际情况灵活运用。

04

jstack

打印Java进程、核心文件或远程调试服务器的Java线程堆栈跟踪。这个命令是实验性的不受支持。

用法:

jstack [ options ] pid

Option:

-l 长名单。打印有关锁的其他信息,例如拥有的java.util.concurrent可拥有同步器。

-m 打印一个混合模式堆栈跟踪,既有java也有本地C/C++框架。

-h 打印堆信息。

 

实战演练

利用jstack排查线上cpu利用率飙升的问题:

先利用top -H -p pid查看应用进程下的所有线程情况,找出占用资源最高的线程

jvisualvm 监控本地dubbo服务 jvm监控命令_Java_08

这里只是只是演示排查步骤,并不表示利用率很高。

最前面的pid是线程id(85802),将其转换成16进制,

printf "%x" 85802

14f2a

然后根据jstack -l 85802 | grep -C 5 14f2a找出这个线程栈信息

jvisualvm 监控本地dubbo服务 jvm监控命令_Java_09