本文主要介绍 cpu,内存,网络,I/O 定位分析方法
瓶颈阈值分析思维导图与手册
如下图系统场景中,可以按照系统性能资源因素分为 CPU,内存,网络,IO 等四块区域来进行监控分析定位
- 主要命令:top, sar, dstat, mpstat 等
CPU定位分析
常用命令:vmstat, sar, dstat, mpstat, top, ps
- 使用情况:
度量方法:
通过
vmstat
统计 1-id 的计数通过
sar -u
统计 1-%idle 的计数通过
dstat
命令 统计 1-idl 的计数通过
mpsat -P ALL
统计 1-%idle 的计数通过
ps
命令统计 cpu 的计数
衡量标准:注意 >=50%,告警 >=70%,严重 >=90%
- 满载
度量方法:
vmstat
的 r 计数 > CPU 逻辑颗数sar -q
, "runq-sz">CPU 逻辑颗数dstat -p
, "run">CPU 逻辑颗数
衡量标准:
运行的队列大于1时,证明已经有一定的负载了,不过这个计数也不绝对,需进一步分析其他的资源情况来断定是否 CPU 已经满负荷动作。
- 错误
度量方法:
(9)通过perf 工具去捕获处理器的错误信息,需处理器支持
衡量标准:需处理器支持
内存定位分析
常用分析命令:vmstat, sar -r, dstat, free, top, ps
- 使用情况:
衡量标准:注意>=50%,告警 >= 70%,严重 >= 80%
- 满载
度量方法:
vmstat
的 si/so 比例辅助 swapd 和 free 利用sar -W
查看次缺页数查看内核日志有无 OOM 机制 kill 进程
dmesg | grep killed
衡量标准:
(1)so 数值大,且 swapd 已经占比很高,内存肯定已经饱和。
(2)sar 命令次缺页多意味已经在不停地和 swap 打交通,证明内存已经饱和
(3)当内存不够用会触发内核的 OOM 机制
- 错误
度量方法:
查看内核有无 physical failures
通过工具 如 valgrind 等进行检查
衡量标准:有计数
网络定位分析
常用分析命令:sar, ifconfig, netstat 以及查看 net 的 dev 速率
通过查看发现收发包的吞吐速率达到网卡的最大上限,网络数据报文有因为这类原因而引发的丢包、阻塞等现象都证明当前网络可能存在瓶颈。
- 使用情况:
度量方法:
sar -n DEV 的收发计数大于网卡上限
ifconfig RX/TX 带宽超过网卡上限
cat /proc/net/dev 的速率超过上限
nicstat 的 util 基本满负荷
衡量标准:
收发包的吞吐速率达到网卡上限
有延迟
有丢包
有阻塞
- 满载
度量方法:
ifconfig dropped 有计数
netstat -s "segments retransmited" 有计数
sar -n EDEV rxdrop txdrop 有计数
衡量标准:统计的丢包有计数证照已经满了
- 错误
度量方法:
ifconfig, "errors"
netstat -i, "RX-ERR"/"TX-ERR"
sar -n EDEV, "rxerr/s" "txerr/s"
ip -s link, "errors"
衡量标准:错误有计数
IO 定位分析
常用分析命令:sar, iostat, iotop
- 使用情况:
度量方法:
iostat -XZ
, "%util"sar -d
, "%util"iotop
的利用率很高cat /proc/pid/sched | grep iowait
衡量标准:注意 >= 40%, 告警 >= 60%, 严重 >=80%
- 满载
度量方法:
iostat -xnz l
, "avgqu-sz">1iostat await > 70
衡量标准:IO 已经有满载嫌疑
- 错误
度量方法:
dmesg 查看 io 错误
smartctl /dev/sda
衡量标准:有信息