13.jdk的命令行工具

1.jps:虚拟机进程状况工具

jps(JVM Process Status Tool),有点像linux的ps命令,通过这个命令你可以查看执行类的名称以及这些进程在本地虚拟机中对应的唯一ID(Local Virtual Machine Identifier, LVMID)。
对于本地虚拟机来讲,LVMID与PID是一致的。
一般用jps -l -m即可,查看启动的jar包的pid和端口号

2.jstat:虚拟机统计信息监视工具

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:
jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 
示例如下:
jstat -gc 5156
输出结果:

在这里插入图片描述

输出结果释义:

S0C:年轻代中第一个survivor(幸存区)的容量 (kb)
S1C:年轻代中第二个survivor(幸存区)的容量 (kb)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (kb)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (kb)
EC:年轻代中Eden(伊甸园)的容量 (kb)
EU:年轻代中Eden(伊甸园)目前已使用空间 (kb)
OC:Old代的容量 (kb)
OU:Old代目前已使用空间 (kb)
MC:方法区的容量 (kb)
MU:方法区目前已使用空间 (kb)
CCSC: 压缩类容量(kb)
CCSU: 压缩类目前已使用空间(kb)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(fullgc)gc次数
FGCT:从应用程序启动到采样时old代(fullgc)gc所用时间(s)
GCT: 总gc使用时间(s)

有时我们仅关系占用空间百分比,使用如下命令:
jstat -gcutil 5156
输出结果如下:

在这里插入图片描述

输出结果释义:

S0:survivor0已用百分比
S1:survivor1已用百分比
E:新生代已用百分比
O:老年代已用百分比
M:方法区已用百分比
CCS:压缩类空间已用百分比
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(fullgc)gc次数
FGCT:从应用程序启动到采样时old代(fullgc)gc所用时间(s)
GCT: 总gc使用时间(s)

3.jinfo:java配置信息工具

查看java进程启动的所有vm参数,示例如下:\
jinfo -flags 5156
输出结果如下:
Attaching to process ID 5156, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.191-b12
Non-default VM flags: -XX:CICompilerCount=2 -XX:InitialHeapSize=33554432 -XX:MaxHeapSize=526385152 -XX:MaxNewSize=175439872 -XX:MinHeapDeltaBytes=196608 -XX:NewSize=11141120 -XX:OldSize=22413312 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops 
Command line:
也可以runtime期间动态修改部分可修改的vm参数

注意,部分命令在jdk1.8已经不再能够使用

4.jmap:Java内存映像工具

用于生成堆转储快照,一般称为heapdump或dump文件
示例如下:
jmap -dump:live,format=b,file=heap001 5156
Dumping heap to /opt/heap001 ...
Heap dump file created

5.jhat:虚拟机堆转储快照分析工具

jdk自带分析dump的工具,基本不会使用,功能太简略
示例如下:

jhat heap001
Reading from heap001...
Dump file created Tue Mar 19 01:36:00 CST 2019
Snapshot read, resolving...
Resolving 666182 objects...
Chasing references, expect 133 dots.....................................................................................................................................
Eliminating duplicate references.....................................................................................................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

访问localhost:7000即可查看分析结果
在这里插入图片描述

6.jstack:Java堆栈跟踪工具

jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。

jstack命令主要用来查看Java线程的调用堆栈的,可以用来分析线程问题(如死锁)。
示例如下:
jstack  5156
2019-03-19 01:46:57
Full thread dump OpenJDK 64-Bit Server VM (25.191-b12 mixed mode):

"Attach Listener" #219 daemon prio=9 os_prio=0 tid=0x00007f9c88083000 nid=0x1920 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"logback-1" #218 daemon prio=5 os_prio=0 tid=0x00007f9c8d352000 nid=0x1725 waiting on condition [0x00007f9c78906000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000000ed5af000> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

"lettuce-eventExecutorLoop-1-1" #60 daemon prio=5 os_prio=0 tid=0x00007f9c8c391000 nid=0x145e waiting on condition [0x00007f9c79634000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000000ec139cd8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
	at io.netty.util.concurrent.SingleThreadEventExecutor.takeTask(SingleThreadEventExecutor.java:238)
	at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:64)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:748)
	.
	.
	.
	

7.HSDIS:JIT生成代码反汇编

待补

猜你喜欢

转载自blog.csdn.net/qq_24516549/article/details/88653717