0%

JVM 板斧

Java 排查问题的命令和工具


前言

JDK 自带些排查问题的命令和工具

jps

jps 主要用来输出JVM中运行的进程状态信息

1
2
3
4
5
6
7
8
jps [options]


[hadoop@hadoop3 ~]$ jps -ml
14020 org.apache.hadoop.yarn.server.nodemanager.NodeManager
28790 com.baidu.hugegraph.dist.HugeGraphServer conf/gremlin-server.yaml conf/rest-server.properties
21704 org.apache.spark.deploy.worker.Worker --webui-port 8081 spark://hadoop1:7077
13497 org.apache.hadoop.hdfs.server.datanode.DataNode

参数说明

-q 不输出类名、Jar名和传入main方法的参数

-m 输出传入main方法的参数

-l 输出main类或Jar的全限名

-v 输出传入JVM的参数

如果遇到 process information unavailable 情况。到 jdk 的安装路径下运行命令 bin/jps

jstack

jstack是JVM自带的Java堆栈跟踪工具,它用于打印出给定的java进程ID、core file、远程调试服务的Java堆栈信息.

1
jstack -l 2815

参数说明

-F 当正常输出的请求不被响应时,强制输出线程堆栈
-l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况
-m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)

相关使用案例见:

jinfo

可看系统启动的参数,如下

1
2
jinfo 30670
jinfo -flags 30670
jmap

Java内存分析工具 jmap
jvm 性能调优工具之 jmap

jstat

jstat参数众多,但是使用一个就够了

1
jstat -gcutil 2815 1000

2815 为 PID;1000 为间隔时间,单位为毫秒;后面还可以跟查询次数

S0C: 第一个幸存区的大小
S1C: 第二个幸存区的大小
S0U: 第一个幸存区的使用大小
S1U: 第二个幸存区的使用大小
EC: 伊甸园区的大小
EU: 伊甸园区的使用大小
OC: 老年代大小
OU: 老年代使用大小
MC: 方法区大小
MU: 方法区使用大小
CCSC: 压缩类空间大小
CCSU: 压缩类空间使用大小
YGC: 年轻代垃圾回收次数
YGCT: 年轻代垃圾回收消耗时间
FGC: 老年代垃圾回收次数
FGCT: 老年代垃圾回收消耗时间
GCT: 垃圾回收消耗总时间

VM options

有时候可以配置下 java 启动参数选项

你的类到底是从哪个文件加载进来的

1
2
3
-XX:+TraceClassLoading
结果形如[Loaded java.lang.invoke.MethodHandleImpl$Lazy from D:programmejdkjdk8U74jrelib
t.jar]

应用挂了输出dump文件

1
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/logs/java.hprof

参考链接