# 查看内核版本
# 一定要和最后install的版本一致
$ uname -r
4.18.0-348.7.1.el8_5.x86_64
# 搜索包并显示版本
$ yum search kernel-devel --showduplicates
# 这个版本最匹配
kernel-devel-4.18.0-348.7.1.el8_5.x86_64
# 使用包含版本的完整包名安装
$ yum install kernel-devel-4.18.0-348.7.1.el8_5.x86_64
# header和devel版本一致
$ yum install kernel-headers-4.18.0-348.7.1.el8_5.x86_64
$ yum install -y bcc-tools
# 加入环境目录,在~/.bashrc加入:
$ export PATH=$PATH:/usr/share/bcc/tools/
# 安装好后尝试执行下
$ execsnoop
BPF 实际起作用的一些代码,内核提供的接口。
BCC bpftrace BPF前端
BCC工具60秒快速检查
快速查看负载情况 1min 5min 15min
$ uptime
10:45:40 up 205 days, 54 min, 1 user, load average: 0.18, 0.16, 0.20
如果1min的负载高于5min或者15min,说明当前正是高负载。
如果1min的负载低于5min或者15min,说明错过了高负载的现场,后续查看的数据都是非高负载情况的数据。
查看当前机器的错误信息
$ dmesg -T | tail -n 10
T 打印可读的时间戳
查看总体内存占用, 总体CPU使用占比
查看核心数量
$ cat /proc/cpuinfo | grep "cpu cores" | uniq 获取物理核心数量
$ cat /proc/cpuinfo | grep "processor" 获取逻辑核心数量
vmstat
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 253240 141064 1181400 0 0 79 101 0 0 2 2 96 0 0
0 0 0 252216 141064 1181404 0 0 0 0 881 1401 1 2 98 0 0
0 0 0 254328 141064 1181404 0 0 0 0 916 1397 1 1 98 0 0
0 0 0 254436 141064 1181416 0 0 0 152 1480 1894 3 8 88 1 0
0 1 0 254504 141064 1181412 0 0 8 488 1180 1743 2 2 96 1 0
0 0 0 254568 141064 1181412 0 0 0 128 1059 1667 2 1 97 1 0
0 0 0 254692 141064 1181412 0 0 0 0 1056 1723 1 1 98 0 0
第一行数据由于工具的启动 不准确
- r 等待时间片的进程数量(等待IO时是睡眠状态,不需要等待时间片,所以这里不含阻塞在IO的进程) 大于CPU核心数量说明饱和。
- free 单位KB 数字很大到不容易换算到GB说明内存充足 具体看free -m
- si so 换入换出的数量, 非0时说明内存不足
- us sy id wa st 用户 系统 空闲 等待IO 偷取时间 IO处理需要系统时间, 系统占比高可能指向系统IO效率低
分核心查看CPU占比 (yum install sysstat)
$ mpstat -P ALL 1
02:04:24 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:04:25 PM all 0.99 0.00 0.50 0.00 0.00 0.50 0.00 0.00 0.00 98.02
02:04:25 PM 0 0.98 0.00 0.98 0.00 0.00 0.98 0.00 0.00 0.00 97.06
02:04:25 PM 1 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 4.64 0.00 1.31 0.28 0.53 0.17 0.00 0.00 0.00 93.07
Average: 0 3.13 0.00 1.51 0.17 0.56 0.17 0.00 0.00 0.00 94.46
Average: 1 6.14 0.00 1.12 0.39 0.50 0.17 0.00 0.00 0.00 91.68
单个核心占用高, 指向单线程的问题
分进程查看CPU占比
$ pidstat 1
02:06:42 PM UID PID %usr %system %guest %wait %CPU CPU Command
02:06:43 PM 0 50128 1.00 0.00 0.00 0.00 1.00 1 qbittorrent-nox
02:06:43 PM 0 1583327 0.00 1.00 0.00 0.00 1.00 1 YDService
02:06:43 PM 0 1641467 0.00 1.00 0.00 0.00 1.00 0 barad_agent
02:06:43 PM 0 3314936 0.00 1.00 0.00 0.00 1.00 1 pidstat
Average: UID PID %usr %system %guest %wait %CPU CPU Command
Average: 0 42 0.00 0.12 0.00 0.00 0.12 - kworker/0:1H-kblockd
Average: 0 623 0.00 0.12 0.00 0.00 0.12 - systemd-journal
Average: 0 948 0.38 0.12 0.00 0.12 0.50 - tuned
Average: 0 50128 0.62 0.12 0.00 0.00 0.75 - qbittorrent-nox
Average: 0 1583327 0.38 0.38 0.00 0.00 0.75 - YDService
Average: 0 1641467 0.38 0.38 0.00 0.00 0.75 - barad_agent
Average: 0 3202896 0.12 0.00 0.00 0.00 0.12 - node
Average: 0 3313606 0.00 0.12 0.00 0.12 0.12 - kworker/1:0-events
Average: 0 3314936 0.12 0.38 0.00 0.00 0.50 - pidstat
相比top, pidstat会将解锁保存到shell的缓冲区 方便观察变化趋势
查看磁盘占用
$ iostat -xz 1
%util 磁盘使用率
avgqu-sz 提交的任务数量, 超过1可能代表有问题
异步IO可能导致性能问题, 因为发起后操作系统不会拒绝, 且一个线程因为不被阻塞可以批量发起.
查看内存占用
$ free -mh
total used free shared buff/cache available
Mem: 7.3Gi 5.8Gi 332Mi 3.0Mi 1.1Gi 1.2Gi
Swap: 0B 0B 0B
网卡占用
$ sar -n DEV 1
02:21:23 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
02:21:24 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:21:24 PM eth0 56.00 50.00 17.92 12.95 0.00 0.00 0.00 0.00
02:21:24 PM cni-podman0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
Average: lo 8.43 8.43 0.75 0.75 0.00 0.00 0.00 0.00
Average: eth0 46.50 43.90 7.77 10.48 0.00 0.00 0.00 0.00
Average: cni-podman0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
rxkB/s txkB/s 收发速率
网络连接建立和重传
$ sar -n TCP,ETCP 1
02:25:04 PM active/s passive/s iseg/s oseg/s
02:25:05 PM 0.00 1.00 5.00 5.00
02:25:04 PM atmptf/s estres/s retrans/s isegerr/s orsts/s
02:25:05 PM 0.00 0.00 0.00 0.00 0.00
Average: active/s passive/s iseg/s oseg/s
Average: 0.50 0.75 10.50 9.75
Average: atmptf/s estres/s retrans/s isegerr/s orsts/s
Average: 0.00 0.00 0.00 0.00 0.25
- active/s TCP连接connect速度
- passive/s TCP连接accept速度
- retrans/s 重传数量
top
提供的数据很多, 但是一直再刷新, 导致很难看到变化相关.
Ctrl-S pause Ctrl-Q continue
追踪系统调用
# 追踪write系统调用 且筛选打开了文件描述符2的进程
strace -fe write `lsof -t "/proc/$$/fd/2" |sed 's/^/-p/'` -o write2.log
# rdi是系统调用第一个参数 其次为rsi rdx r10 r8 r9
b write if $rdi == 2
# 8个字节 x 16进制 b以bytes为单位打印
x /8xb ptr