jdk命令行工具详解

jps

它的功能和ps类似:可以列出正在运行的虚拟机进程,并显示虚拟机主类以及这些进程本地虚拟机唯一ID(Local Visual Machine Identifier,LVMID)。

虽然功能比较简单,但是它是使用频率最高的JDK命令行工具,因为其他JDK命令行工具大多需要输入它查询到的LVMID来确定要监控的哪一个虚拟机进程。命令格式:

jps [options] [hostid]

jps -l

-l 只输出LVMID

-m 输出虚拟机进程启动时传给Main的参数

-l 输出主类全名

-v 输出虚拟机进程启动时jvm参数

$ jps -l
5928 org.jetbrains.jps.cmdline.Launcher
5929 org.apache.rocketmq.console.App

jstat

它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图像界面,只提供纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首先工具。命令格式:

jstat [option vmid [interval[s|ms] [count]] ]

例如每隔2s查询一次进程5929垃圾收集情况,一共查询10次。命令如下:

jstat -gc 5929 2000 10 

$ jstat -gc 5929 2000 10
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT
87040.0 76288.0  0.0   73789.6 453120.0 427991.0  247808.0   138753.8  45056.0 43572.1 5632.0 5287.9    653    4.477   3      0.405   -          -    4.882
87040.0 76288.0  0.0   73789.6 453120.0 437959.5  247808.0   138753.8  45056.0 43572.1 5632.0 5287.9    653    4.477   3      0.405   -          -    4.882

选项option代表用户需要查询的虚拟机信息,主要分三类:类加载、垃圾收集,运行期编译

-gc 监控Java堆情况,包括Edge区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息

-gccause 

-gcutil

-gcnew

-gcold

......

jinfo

其作用是实时的查看和调整虚拟机各项参数。JDK1.6以上版本也可以使用java -XX:PrintFlagsFinal查看参数默认值。

命令格式:jinfo [option] pid

$ jinfo -flag MaxHeapSize 5929
-XX:MaxHeapSize=4294967296

$ jinfo -flag MaxNewSize 5929
-XX:MaxNewSize=1431306240

jmap

Java内存镜像工具,Memory Map for Java命令用于生产堆转储快照。

要想获取Java内存快照还有一些比较暴力的手段:譬如用-XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机再OOM异常出现后自动生产dump文件。

jmap不仅为获取dump文件,还可以查询finalize执行队列、Java堆和永久代的详细信息,命令格式:

jmap [option] vmid

-dump 生成Java内存快照,格式为:-dump [live,]format=b,file=

$  jmap -dump:format=b,file=dump.tmp 5929
Heap dump file created

-heap 显示Java堆显示信息,如使用垃圾回收器、参数配置、分代情况等

...... 

jhat 

虚拟机转储快照分析工具

jhat命令与jmap命令搭配使用,来分析jmap生成的堆转储快照。jhat内置了一个微型的http/html服务器,生成dump文件的分析结果后,可以在浏览器中查看。

事实上,实际工作中,很少这么干。因为很少在部署应用的服务器直接分析dump文件,而且VisualVM提供有更强大专业的dump文件分析能力。

jhat dump.txt

jstack

java堆栈跟踪工具,Stack Trace for Java,用来生成虚拟机当前时刻的线程快照(threaddump)。

线程快照就是当前虚拟机内每一个线程正在执行的方法堆栈的集合,生产线程快照的目的主要是定位线程出现长时间停顿的原因。

如线程死锁、死循环、请求外部资源导致长时间停顿等都是导致线程长时间等待的原因。

线程出现长时间停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道

没有响应的线程在后台做些什么事情,或者等待什么资源。

jstack 命令格式

jstack [option] vmid

-F 强制

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

$ jstack -l  5929 > tmp.txt

javap

查看编译后的内容

javap -verbose Duck.class
# java 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×