JDK的命令行工具

这些命令行工具大多数是lib\tools.jar类库的一层薄包装而已,他们主要的功能代码是在tools类库中实现的。


tools.jar中的类库不属于Java的标准API,如果引入这个类库,就意味着你的程序只能运行在Sun Hotspot(或一些从Sun买了JDK源码License的虚拟机,如IBM J9、BEAJRockit)上面,或者在部署程序时需要一起部署tools.jar。


Sun JDK监控和故障处理工具:
jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。
jstat JVM Statistics Monitoring Tool,用户手机HotSpot虚拟机各方面的运行数据








jps:虚拟机进程状况工具
-q 只输出LVMID,省略主类的名称
-m 输出虚拟机进程启动时传递给主类main()函数的参数
-l 输出主类的全名,如果进程执行的是Jar包,输出Jar路径
-v 输出虚拟机进程启动JVM参数




jstat:虚拟机统计信息监视工具
可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
命令格式 jstat [option vmid [interval[s|ms] [count]]]
如果是远程虚拟机进程 那么VMID格式:[protocol:][//]lvmid[@hostname[:port]/servername]
参数interval和count代表查询间隔和次数,如果省略了这两个参数,说明只查询一次。


假如需要每250毫秒查询一次进程2764垃圾收集的状况,一共查询20次:
jstat -gc 2764 250 20


选项option代表着用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集和运行期编译状况。
jstat工具主要选项:
-class 监控类装载、卸载数量、总空间及类装载所耗费的时间
-gc 监视Java堆状况,包括Eden区、2个survivor区、老年代、永久代等的容量,已用空间、GC时间合计等信息
-gccapacity 监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大和最小空间
-gcutil 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause 与-gcutil功能一样,但是会额外输出导致一次GC产生的原因
-gcnew 监视新生代GC的状态
-gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大和最小空间
-gcold 监视老年代GC状况
-gcoldcapacity 监视内容与-gcnew基本相同,输出主要关注使用的最大和最小空间
-gcpermcapacity 输出永久代使用到的最大和最小空间
-compiler 输出JIT编辑器编译过的方法、耗时等信息
-printcompilation输出已经被JIT编译的方法


C:\Users\Administrator>jstat -gcutil 4100 1000 100
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00   3.00  23.77  54.91      7    0.131     3    0.247    0.378
  0.00   0.00   3.00  23.77  54.91      7    0.131     3    0.247    0.378
  0.00   0.00   3.00  23.77  54.91      7    0.131     3    0.247    0.378
  0.00   0.00   3.00  23.77  54.91      7    0.131     3    0.247    0.378
新生代Eden区(E,表示Eden)使用了3.0%的空间,两个Survivor区(S0、S1,表示Survivor0、Survivor1)里面都空的,老年代(o,表示Old)和永久代(P,表示Permanent)使用了54.91的空间。
程序允许以来共发生Minor GC(YGC,表示Young GC)16次,总耗时0.131秒,发生Full GC(FGC,表示Full GC)3次,Full GC总耗时(FGCT,表示Full GC Time)为0.247妙,所有GC总耗时(GCT,表示GC Time)为0.378妙。


S0  — Heap上的 Survivor space 0 区已使用空间的百分比
S1  — Heap上的 Survivor space 1 区已使用空间的百分比
E   — Heap上的 Eden space 区已使用空间的百分比,新生代Eden区
O   — Heap上的 Old space 区已使用空间的百分比,老年代
P   — Perm space 区已使用空间的百分比,永久代
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)






jinfo:Java配置信息工具
jinfo是作用是实时查看和调整虚拟机的各项参数。使用jps -v参数可以查看虚拟机启动时显示执行的参数列表。
C:\Users\Administrator>jinfo -flag PretenureSizeThreshold 7832
-XX:PretenureSizeThreshold=0






jmap:Java内存映像工具
jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。
-dump 生成Java堆转储快照。
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象。
-heap 显示Java堆详细信息。
-histo 显示堆中对象统计信息。
-permstat 以ClassLoader为统计口径显示永久代内存状态。
-F 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照。


C:\Users\Administrator>jmap -histo 7832 >D:\\j.txt






jhat:虚拟机堆转储快照分析工具
与jmap搭配使用,来分析jmap生成的堆 转储快照。








jstack:Java堆栈跟踪工具
jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。
-f 当正常输出的请求不被响应时,强制输出线程堆栈
-l 除堆栈外,显示锁的附件信息
-m 如果调用到本地方法的话,可以显示C/C++的堆栈

你可能感兴趣的:(java,jdk,虚拟机,ClassLoader,工具,statistics)