Java 排查问题的命令和工具
前言
JDK 自带些排查问题的命令和工具
jps
jps 主要用来输出JVM中运行的进程状态信息
1 | jps [options] |
参数说明
-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 | jinfo 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 | -XX:+TraceClassLoading |
应用挂了输出dump文件
1 | -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/logs/java.hprof |
参考链接