JVM基本监控命令

jps

查看Java进程

jps [option] [hostid]

hostid:默认为本机

option(常用):

-l 输出主类的全名,如果是Jar则输出jar的路径

JVM基本监控命令_第1张图片

jinfo

实时查看虚拟机的各项参数信息

jinfo [option] pid

option(常用):

-flag name  打印命令行参数(name为参数名称)。

-flag [+|-]name  启用或禁用指定的boolean类型的命令行标识参数。

-flag name=value  为给定的命令行标识参数设置指定的值。



jmap

jmap用于生成堆快照(heapdump)

jmap [option] pid

option(常用):

-dump  生成对应的dump信息,用法为-dump:[live,]format=b,file=fileName。

-histo  显示堆栈中的对象的统计信息,包含类、实例数量和合计容量。

-F  当虚拟机对-dump无响应时可使用这个选项强制生成dump快照(线上慎用!!!)

当然我们有很多方法可以取到对应的dump信息:

1 如我们通过JVM启动时加入启动参数 –XX:HeapDumpOnOutOfMemoryError参数,可以让JVM在出现内存溢出错误的时候自动生成dump文件。

2 也可以通过-XX:HeapDumpOnCtrlBreak参数,在运行时使用ctrl+break按键生成dump文件。

3 当然我们也可以使用kill -3 pid的方式去恐吓JVM生成dump文件。


jhat

jhat是用来分析dump文件的一个微型的HTTP/HTML服务器,一般和jmap连用。它能将jmap生成的dump文件生成在线的HTML文件,让我们可以通过浏览器进行查阅,然而实际中我们很少使用这个工具,因为一般服务器上设置的堆、栈内存都比较大,生成的dump也比较大,直接用jhat容易造成内存溢出,而是我们大部分会将对应的文件拷贝下来,通过其他可视化的工具进行分析。例如:VisualVm,IBM HeapAnalyzer。

jhat dump_file

执行命令后,我们看到系统开始读取这段dump信息,当系统提示Server is ready的时候,用户可以通过在浏览器键入http://ip:7000进行查询。


jstat

jstat主要用于监控虚拟机的各种运行状态信息,如类的装载、内存、垃圾回收、JIT编译器等。

jstat [option] pid [interval] [count]

option(常用):

-class  监视类的装载、卸载数量以及类的装载总空间和耗费时间等。

-gc  监视Java堆,包含eden、2个survivor区、old区和永久带区域的容量、已用空间、GC时间合计等信息。

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

-gccause  与-gcutil输出信息相同,额外输出导致上次GC产生的原因。

JVM基本监控命令_第2张图片
gcutil

S0 — Heap上的 Survivor space 0 区已使用空间的百分比

S1 — Heap上的 Survivor space 1 区已使用空间的百分比

E   — Heap上的 Eden space 区已使用空间的百分比

O   — Heap上的 Old space 区已使用空间的百分比

P   — Perm space 区已使用空间的百分比

YGC — 从应用程序启动到采样时发生 Young GC 的次数 

YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)     

FGC — 从应用程序启动到采样时发生 Full GC 的次数

FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)     

GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)



jstack

jstack用于JVM当前时刻的线程快照,又称threaddump文件,它是JVM当前每一条线程正在执行的堆栈信息的集合。生成线程快照的主要目的是为了定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部时长过长导致线程停顿的原因。

jstack [option] pid

option(常用):

-F  当正常输出的请求不响应时强制输出线程堆栈(线上慎用!!!)。

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

-m  显示native方法的堆栈信息。

PS:为什么在线上慎用-F参数。大体意思就是使用了-F参数之后,it will suspend all Java threads in the target process

https://stackoverflow.com/questions/12061226/how-does-jstack-f-affect-a-running-java-process

你可能感兴趣的:(JVM基本监控命令)