参考文章: https://mp.weixin.qq.com/s/OihP6sS1-HzyOP_H3odX8g


1 如果不知道CPU核数,可以先看CPU核数



mpstat -P ALL 2 1     //每2秒打印一次,并且只打印一次



其他:如何要看详细请用sar -P ALL



 



线上系统异常linux跟踪命令大致流程(JVM)_时间段

 



 



参数

释义

从/proc/stat获得数据

CPU

处理器ID

 

%usr

在internal时间段里,用户态的CPU时间(%),不包含 nice值为负进程

usr/total*100

%nice

在internal时间段里,nice值为负进程的CPU时间(%)

nice/total*100

%sys

在internal时间段里,核心时间(%)

system/total*100

%iowait 

在internal时间段里,硬盘IO等待时间(%)

iowait/total*100

%irq

在internal时间段里,硬中断时间(%)

irq/total*100

%soft

在internal时间段里,软中断时间(%)

softirq/total*100

%steal

显示虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间的百分比

steal/total*100

%guest

显示运行虚拟处理器时CPU花费时间的百分比

guest/total*100

%gnice

 

gnice/total*100

%idle

在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%)

idle/total*100

 



      



2 使用top查看系统状态



top



其中 M 内存排序,P cpu排序



top -p pid 指定某个进程id



 



线上系统异常linux跟踪命令大致流程(JVM)_系统异常_02

 



 



可用free -h 查看内存



 



线上系统异常linux跟踪命令大致流程(JVM)_JVM_03

 



 



也可用df -h查看当前磁盘空间,du -h --max-depth=1 查看当前目录下的各个目录使用空间


 



3 上面top如果有异常,我们可以取top有异常的进程ID pid来分析



1 首先查看java GC状态(定位JVM内存状态)

jstat -gc 23042 5 5             //公式:jstat -gc pid [interval]


说明:主要看他的full gc老年代次数(看新生代GC也行),如果GC次数过多,可能就是内存泄漏问题了



线上系统异常linux跟踪命令大致流程(JVM)_时间段_04

 



 



4 定位JVM内存状态发现GC异常,我们这时需要保存栈、堆的现在信息来分析


保存线程栈现场:jstack 23042 > jstack.log                            // 得到jstack.log文件
  
 
  

   保存堆现场:jmap -dump:format=b,file=heap.log 23042                  // 得到heap.log文件

 



5 分析栈现场的日志



统计线程数:grep 'java.lang.Thread.State' jstack.log  | wc -l

521       // 会输出一个行数
  
 
  

   看线程状态是否正常: grep -A 1 'java.lang.Thread.State' jstack.log  | grep -v 'java.lang.Thread.State' | sort | uniq -c |sort -n

 



线上系统异常linux跟踪命令大致流程(JVM)_时间段_05

 



备注:如果对应等待或休眠过大那就可能是异常了


6 MAT分析堆现场日志(由于这个日志是二进制,所以无法直接用linux命令分析)



1 先将heap.log 日志改为 heap.hprof



然后使用MAT打开heap.hprof文件,选择如下,在A点 通过报名进行过滤,比如公司项目报名前缀为 com.lisam.xxxx,输入"com.lisam.*" 就可以过滤出这些对象的使用频率了。



 



线上系统异常linux跟踪命令大致流程(JVM)_JVM_06

 



 



7 当然还需要结合线上错误日志、nginx访问日志、链路监控日志、接口访问日志等来判断系统异常,具体就要结合公司的系统架构了。