
USE 方法
对于每个资源,检查:
- Utilization(利用率):资源忙碌的时间百分比
- Saturation(饱和度):排队等待的额外工作量
- Errors(错误):错误计数

CPU 分析
# 整体 CPU 利用率
top -1 # 按 CPU 分解,按 1 键
htop # 交互式,比 top 更好
mpstat -P ALL 1 # 每秒显示每个 CPU 统计
# CPU 饱和度(运行队列)
vmstat 1 # r 列 = 等待 CPU 的进程数
# r > CPU 数量 = 饱和!
uptime # 1/5/15 分钟平均负载
# 什么在使用 CPU
pidstat 1 # 每秒显示每个进程的 CPU
perf top # 实时内核/用户态分析
perf record -F 99 -a -g -- sleep 10 # 记录火焰图数据
perf report # 分析记录
内存分析
# 内存概览
free -h # 总量/已用/空闲/缓冲区/缓存
cat /proc/meminfo # 详细分解
# 内存饱和度(交换 = 糟糕)
vmstat 1 # si/so 列 = 换入/换出
iostat -xz 1 # 检查交换 I/O
# 内存泄漏 - 按进程
pmap -x <pid> # 进程内存映射
smem --sort rss # 按常驻集大小排序
valgrind --leak-check=full ./app # 查找泄漏
# 缺页错误
perf stat -e page-faults ./app

磁盘 I/O 分析
# I/O 概览
iostat -xz 1 # %util, await (ms), r/s, w/s
# util > 90% = 磁盘饱和
# await > 10ms = I/O 慢
# 什么在进行 I/O
iotop -ao # 产生 I/O 的进程
pidstat -d 1 # 每个进程的 I/O 统计
# 文件级跟踪(eBPF)
opensnoop # 显示所有 open() 系统调用
filelife # 短生命周期文件
ext4slower 10 # 慢于 10ms 的 ext4 操作
网络分析
# 网络统计
netstat -s # 协议统计
ss -s # 套接字摘要
ss -ntlp # 监听中的 TCP 套接字
# 网络 I/O
sar -n DEV 1 # 网络接口统计
nethogs # 每个进程的带宽
iftop # 每个连接的带宽
# 连接分析
ss -n 'state time-wait' | wc -l # TIME_WAIT 连接数
ss -n 'state close-wait' | wc -l # CLOSE_WAIT(可能泄漏)

strace 系统调用跟踪
# 跟踪运行中的进程
strace -p <pid>
strace -p <pid> -e trace=read,write,open,close # 过滤系统调用
# 带时间跟踪
strace -T -p <pid> # 显示每个系统调用花费的时间
# 跟踪命令
strace -o output.txt -T -tt ls /tmp
perf 火焰图
# 1. 记录 CPU 性能剖析
perf record -F 99 -g -p <pid> -- sleep 30
# 2. 生成火焰图(需要 FlameGraph 工具)
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg
# 在浏览器中查看
open flame.svg
eBPF 工具(BCC/bpftrace)
# 所有 execve 调用(新进程)
execsnoop
# TCP 连接跟踪
tcpconnect # 显示新的 TCP 连接
tcpaccept # 显示传入连接
# DNS 查询
dnsnoop
# 自定义 bpftrace 脚本
bpftrace -e '
tracepoint:syscalls:sys_enter_write {
@[comm] = count();
}
interval:s:5 {
print(@);
clear(@);
}
'
快速性能检查清单
# 60 秒分析清单
uptime # 平均负载趋势
dmesg | tail # 内核消息
vmstat 1 3 # 虚拟内存统计
mpstat -P ALL 1 # CPU 分解
pidstat 1 3 # 进程统计
iostat -xz 1 3 # 磁盘 I/O
free -h # 内存
sar -n DEV 1 3 # 网络接口统计
sar -n TCP,ETCP 1 # TCP 统计
top # 系统概览