JAVA 项目常用故障排查

第三方 诊断工具 Greys、Arthas 也非常优秀
Greys 、 https://github.com/oldmanpushcart/greys-anatomy Arthas、https://alibaba.github.io/arthas/quick-start.html

常用命令

1、pidstat

查看进程的 cpu、memory、disk 使用情况,已定时轮询的方式

# 安装
$ yum install sysstat  
$ apt-get install sysstat

# 每一秒钟采样一次 一共采样3次 采样进程为13084
# -p 指定进程号
# memory 情况
$ pidstat -r -p 13084 1 3
# cpu 情况
$ pidstat -u -p 13787 1 3
# disk 情况
$ pidstat -d -p 13787 1 3

2、top

查看主机整体状态

# 查看总内存
# 主机的总内存  单位字节 
KiB Mem :  7965884 total

# 或
$  cat /proc/meminfo | grep MemTotal

3、jps

jdk/bin 自带,只列出java 相关进程

jps -m -l

4、jstat

jdk自带,对Java应用程序的资源和性能进行实时的命令行的监控

# 521是进程号,1000单位是毫秒即1秒。命令解释:每秒查一次类加载情况,一共查两次结束。

jstat -class -t 521 1000 2

参数

说明

-class

显示ClassLoad的相关信息

-compiler

显示JIT编译的相关信息

-gc

显示和gc相关的堆信息,单位KB

-gccapacity

显示各个代的容量以及使用情况,容量单位KB

-gcmetacapacity

显示metaspace的大小

-gcnew

显示新生代信息

-gcnewcapacity

显示新生代大小和使用情况

-gcold

显示老年代和永久代的信息

-gcoldcapacity

显示老年代的大小

-gcutil

显示垃圾收集信息

-gccause

显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因

-printcompilation

输出JIT编译的方法信息

5、jinfo

jdk 自带,查询/设置运行中的java项目jvm参数

# 查看进程为66156的所有 jvm 参数
jinfo -flags  66156

# 查看OldSize的值
# jinfo -flag OldSize  13787
-XX:OldSize=716177408

6、jmap

jdk 自带, 导出堆到文件

# -histo 进程号为13787的对象统计信息
jmap -histo 13787 > s.txt
# -dump 当前堆快照,mat分析必备,13787进程号
jmap -dump:format=b,file=heap.hprof 13787
# 打印 进程13787 的堆统计信息,常用非常友好的输出
jmap -heap 13787

7、jhat

jdk自带堆分析工具,可分析.hprof 文件,然后会开启一个服务器,使用浏览器查看

# 使用http://127.0.0.1:7000 查看分析,提供OQL 查询
jhat heap.hprof

8、jstack

jdk自带,查看线程堆栈

# 打印进程为13787的线程堆栈 -l 参数用于打印锁的附加信息
jstack -l 13787

9、jstatd

jdk自带,是一个RMI服务端程序,相当于代理服务器,建立本机与远程服务器通信,使用时注意权限。

10、jcmd

jdk自带,是个多功能命令行,oracle推荐使用jcmd 替换 jmap

# 列出所有的正在运行的java虚拟机(java项目)
jcmd -l

# 查看指定虚拟机支持的jcmd 命令,数字是进程号
jcmd 13787 help

# 查看vm运行时间
jcmd 13787 VM.uptime

# 查看线程信息
jcmd 13787 Thread.print

# 打印系统properties
jcmd 13787 VM.system_properties

# 获得vm启动参数
jcmd 13787 VM.flags

# 获取性能统计相关信息
jcmd 13787 PerfCounter.print