1.JVM命令
首先我们查看JVM自带的命令:
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
appletviewer | javah | jjs | jvisualvm | schemagen |
extcheck | javap(重要) | jmap(重要) | keytool | serialver |
idlj | javapackager | jmc | native2ascii | servertool |
jar | jcmd | jps(重要) | orbd | tnameserv |
jarsigner | jconsole(重要) | jrunscript | pack200 | unpack200 |
java(重要) | jdb | jsadebugd | policytool | wsgen |
javac(重要) | jdeps | jstack(重要) | rmic | wsimport |
javadoc | jhat(重要) | jstat(重要) | rmid | xjc |
javafxpackager | jinfo | jstatdrmiregistry |
目前很多工具比如arthas已经可以替代主要命令。
2.jps
jps主要用来输出JVM中运行的进程状态信息
jps [options] [hostid]
如果不指定hostid就默认为当前主机或服务器,一般也无法连接远程的机器。
主要用法:
-m 输出传入main方法的参数
比如:
[work(caibin)@bjdhj-63-189 ~]$ jps -m
1372 Bootstrap start
258878 Jps -m
3.jstack
jstack是jdk自带的线程堆栈分析工具,使用该命令可以查看或导出 Java 应用程序中线程堆栈信息。
[work(caibin)@bjdhj-63-189 ~]$ jstack -help
Usage:
jstack [-l] <pid>
(to connect to running process)
jstack -F [-m] [-l] <pid>
(to connect to a hung process)
jstack [-m] [-l] <executable> <core>
(to connect to a core file)
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
(to connect to a remote debug server)
Options:
-F to force a thread dump. Use when jstack <pid> does not respond (process is hung)
-m to print both java and native frames (mixed mode)
-l long listing. Prints additional information about locks
-h or -help to print this help message
我们一般可以将它输出到文件中查看
jstack -pid > caibin.txt
⑴检测线程占用CPU
jps定位到进程之后,用
top -Hp 进程号
来查看具体的线程:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1693 work 20 0 20.2g 3.2g 13m S 6.3 5.2 653:51.15 java
1694 work 20 0 20.2g 3.2g 13m S 6.3 5.2 653:51.25 java
1696 work 20 0 20.2g 3.2g 13m S 6.3 5.2 651:46.34 java
1763 work 20 0 20.2g 3.2g 13m S 6.3 5.2 634:59.72 java
1695 work 20 0 20.2g 3.2g 13m S 5.7 5.2 651:53.10 java
我们把1694转成16进制:
[work(caibin)@bjdhj-63-189 ~]$ printf "%x\n" 1694
69e
然后我们jstack进程号输出到文件,从文件找到这个线程就可以了。
⑵jstack检测死锁
jstack -l 进程号
死锁一般很少出现。
4.jmap
jmap主要观察堆内对象示例的统计信息、ClassLoader 的信息以及 finalizer 队列。
jmap [option] <pid>
jmap有的时候回报这个错误:
sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 24.80-b11. Target VM is 25.144-b01
这是因为我们环境配的和项目用的不一样导致的。
5.jstat
⑴垃圾回收统计
// 每250ms统计一次,统计4次
jstat -gc 1372 250 4
输出:
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
0.0 1024.0 0.0 1024.0 3605504.0 1142784.0 2117632.0 44891.4 � � 2504 171.488 0 0.000 171.488
0.0 1024.0 0.0 1024.0 3605504.0 1144832.0 2117632.0 44891.4 � � 2504 171.488 0 0.000 171.488
0.0 1024.0 0.0 1024.0 3605504.0 1147904.0 2117632.0 44891.4 � � 2504 171.488 0 0.000 171.488
0.0 1024.0 0.0 1024.0 3605504.0 1152000.0 2117632.0 44891.4 � � 2504 171.488 0 0.000 171.488
- S0C:年轻代中第一个survivor(幸存区)的容量 (kb)
- S1C:年轻代中第二个survivor(幸存区)的容量 (kb)
- S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (kb)
- S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (kb)
- EC:年轻代中Eden(伊甸园)的容量 (kb)
- EU:年轻代中Eden(伊甸园)目前已使用空间 (kb)
- OC:Old代的容量 (kb)
- OU:Old代目前已使用空间 (kb)
- PC:Perm(持久代)的容量 (kb)
- PU:Perm(持久代)目前已使用空间 (kb)
- YGC:从应用程序启动到采样时年轻代中gc次数
- YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
- FGC:从应用程序启动到采样时old代(全gc)gc次数
- FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
- GCT:从应用程序启动到采样时gc用的总时间(s)