参数
|
释义
|
从/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
|
线上系统异常linux跟踪命令大致流程(JVM)
1 如果不知道CPU核数,可以先看CPU核数
mpstat -P ALL 2 1 //每2秒打印一次,并且只打印一次
其他:如何要看详细请用sar -P ALL
2 使用top查看系统状态
top
其中 M 内存排序,P cpu排序
top -p pid 指定某个进程id
可用free -h 查看内存
也可用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次数过多,可能就是内存泄漏问题了
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
备注:如果对应等待或休眠过大那就可能是异常了
6 MAT分析堆现场日志(由于这个日志是二进制,所以无法直接用linux命令分析)
1 先将heap.log 日志改为 heap.hprof
然后使用MAT打开heap.hprof文件,选择如下,在A点 通过报名进行过滤,比如公司项目报名前缀为 com.lisam.xxxx,输入"com.lisam.*" 就可以过滤出这些对象的使用频率了。
7 当然还需要结合线上错误日志、nginx访问日志、链路监控日志、接口访问日志等来判断系统异常,具体就要结合公司的系统架构了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.