bug analysis
Table of Contents
title
本文记录对问题诊断的学习或者说为本人的备忘录,便于以后温故而知新,前部分是对常见的场景的排查思路,后部分主要为对常见command
的总结(已知请skip)虽然将工具的总结置于文末,但是就好比如何将大象装进冰箱这个问题,了解了思路,但是具体如何落地呢
对于javaer
来说,show me u code
才是关键
分析
本章节是对常见问题的考虑和解决思路的探究
cpu占用高
todo: 最近太忙了,先过段时间
技术栈
其实这里称之为技术栈并不妥当,主要还是从层次上分析工具的结构
java
包括jstack
,jmap
,arthas
.etcjvm
包括gdb
,strace
.etcos
包括perf
,bcc
,bpftrace
.etchardware
包括top
(cpu),free
(memory),iostat
(disk),iftop
(network)network
包括ngrep
,tcpdump
.etcsoftware
包括ps
,netstat
.etc
分析视角
自底向上
- 进程占用
- 线程占用
- 代码占用
自顶向下(负载)
- controller/rpc 耗时
- mapper/rpc 耗时
- sql execute/ java code execute 耗时
USE 观测法
- 使用率(utilization)
- 饱和度(saturation)
- 错误(errors)
以java的threadpool
举例:
- 线程池为软件资源
- 线程池使用率: 目前正在运行任务线程数占总线程数的百分比
- 线程池的饱和度: 目前正在线程池任务队列中排队的任务数量
- 线程池的错误: 触发线程池拒绝策略的次数
通用思路
- 阅读日志(定位)
- 检查资源占用(分析)
- 使用排查工具(确认)
工具分类
这里并不齐全,但是包含主流的工具
tool | 用户态 | 内核态 |
---|---|---|
指标类 | ps,netstat,arthas | top ,free,iostat,iftop,sar |
剖析类 | jstack,jmap,arthas,gdb | perf.bcc |
剖析类 | arthas,gdb | perf,bcc,bpftrace,tcpdump |
java
java
层面的分析工具,一个图形化,一个命令行
arthas
alibaba
的开源框架真的很强
visualvm
感觉是分析java
软件的top 1
,最关键的是它是开源的
log view
工具十分丰富,本人了解的more
,less
,head
,tail
,cat
,grep
,awk
,慎用cat
这种全量加载的command,
不要对vim
或者vi
过度依赖,存在和cat
相同的问题
less
Syntax | Description |
---|---|
f | 向前翻页 |
b | 向后翻页 |
q | exit |
/xxx | 搜索xxx |
& + ! + xx | 过滤包含xxx的日志 |
less xxx.jar | 查看 jar包 |
combine
history | less
查看当前host
的operation history,效果如下
2836 git add lary-api-stream/
2837 cd /opt/maven/conf
2839 vim settings.xml
2840 poweroff
2841 sudo pacman -Syu
2842 reboot
2843 exit
2844 ls
2845 less jmeter.log
2846 ls -al jmeter.log
2847 echo 3479731/1024
2849 less jmeter.log -N
2850 less jmeter.log
2851 history less
ps -ef |less
查看进程信息并分页,效果就不必演示
grep
awk
wc
sort
vim
vim
的set list
会显示空格,在写sh
文件的时候防止错误