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