jps
查看Java进程
jps [option] [hostid]
hostid:默认为本机
option(常用):
-l 输出主类的全名,如果是Jar则输出jar的路径
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产生的原因。
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