文章总结: 文章系统梳理top、vmstat、perf、strace四大LinuxCPU性能分析工具,给出命令速查、字段释义、交互技巧及可落地脚本,覆盖实时监控、系统调用追踪、性能计数器采样、负载瓶颈判定全流程,附综合排障脚本可直接集成运维平台。 综合评分: 92 文章分类: 安全工具,安全运营,实战经验,安全建设,解决方案
CPU 性能分析工具深度指南:top、vmstat、perf、strace
原创
刘军军
运维星火燎原
2026年1月12日 00:01 山西
一、工具定位与选择矩阵
二、top – 实时进程监控
2.1 top 基础用法
# 启动top
top
# 批处理模式,运行3次,间隔2秒
top -b -n 3 -d 2
# 指定排序字段(CPU使用率)
top -o %CPU
# 监控特定用户进程
top -u username
# 保存输出到文件
top -b -n 1 > top_output.txt
2.2 top 交互命令(运行时按键)
# 常用交互命令:
1 : 显示所有CPU核心的详细 usage
P : 按CPU使用率排序(默认)
M : 按内存使用率排序
T : 按运行时间排序
z : 切换颜色显示
x : 高亮显示排序的列
W : 保存当前配置到 ~/.toprc
q : 退出top
# 高级功能:
V : 显示进程树状结构
f : 选择显示的字段
o : 设置过滤条件
k : 杀死进程
2.3 top 输出关键字段解析
# 顶部系统信息区:
top - 18:30:01 up 10 days, 3:15, 1 user, load average: 0.05, 0.10, 0.15
# ↳ 当前时间 | 运行时间 | 登录用户数 | 1,5,15分钟负载
Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie
# ↳ 进程总数 | 运行中 | 睡眠中 | 停止 | 僵尸进程
%Cpu(s): 2.3 us, 1.2 sy, 0.0 ni, 96.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
# ↳ 用户空间 | 内核空间 | 优先级调整 | 空闲 | I/O等待 | 硬件中断 | 软件中断 | 虚拟化偷取
# 进程信息区:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 www-data 20 0 2.5g 1.2g 100m S 45.6 7.8 10:30.15 nginx
# ↳ 进程ID | 用户 | 优先级 | 友好值 | 虚拟内存 | 常驻内存 | 共享内存 | 状态 | CPU% | 内存% | 运行时间 | 命令
2.4 实战:使用 top 分析 CPU 瓶颈
#!/bin/bash
# top-cpu-analysis.sh
echo"=== Top CPU性能分析 ==="
echo"1. 获取系统快照..."
top -bn1 | head -5
echo -e "\n2. 分析CPU使用前10进程:"
top -bn1 -o %CPU | awk '/^ *[0-9]/ {if(NR<=15) printf "PID: %-6s USER: %-8s CPU: %-5s MEM: %-5s COMMAND: %s\n", $1, $2, $9, $10, $12}'
echo -e "\n3. 检查系统负载:"
echo"CPU核心数: $(nproc)"
load=$(cat /proc/loadavg | awk '{print $1}')
cores=$(nproc)
echo"当前负载: $load, CPU核心: $cores"
if (( $(echo"$load > $cores" | bc -l) )); then
echo"警告: 系统负载过高!"
else
echo"系统负载正常"
fi
三、vmstat – 系统性能统计
3.1 vmstat 基础用法
# 基本用法:间隔2秒,显示5次
vmstat 2 5
# 显示磁盘I/O统计
vmstat -d 2 3
# 显示分区统计
vmstat -p /dev/sda1 2 3
# 显示详细内存信息
vmstat -s
# 显示 slab 信息
vmstat -m
3.2 vmstat 输出字段详解
# vmstat 2 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 123456 78900 456789 0 0 10 20 100 200 10 5 85 0 0
# 字段解析:
# procs:
# r = 运行队列中的进程数
# b = 等待I/O的阻塞进程数
# memory (KB):
# swpd = 使用的虚拟内存量
# free = 空闲内存量
# buff = 用作缓冲区的内存
# cache = 用作缓存的内存
# swap:
# si = 从磁盘交换进内存的量
# so = 从内存交换到磁盘的量
# io (blocks/s):
# bi = 从块设备接收的块数
# bo = 发送到块设备的块数
# system (interrupts/s):
# in = 每秒中断数
# cs = 每秒上下文切换数
# cpu (%):
# us = 用户空间CPU时间
# sy = 内核空间CPU时间
# id = 空闲CPU时间
# wa = 等待I/O的CPU时间
# st = 虚拟化偷取时间
3.3 实战:vmstat 性能分析脚本
#!/bin/bash
# vmstat-performance-analysis.sh
echo"=== Vmstat 系统性能分析 ==="
echo"采集5次数据,间隔2秒..."
echo""
# 收集数据
vmstat 2 5 > /tmp/vmstat_output.txt
# 分析数据
echo"1. CPU使用情况分析:"
awk 'NR>2 {us+=$13; sy+=$14; id+=$15; wa+=$16; count++} END {
printf "用户空间: %.1f%%, 内核空间: %.1f%%, 空闲: %.1f%%, I/O等待: %.1f%%\n",
us/count, sy/count, id/count, wa/count
}' /tmp/vmstat_output.txt
echo -e "\n2. 内存和交换分析:"
awk 'NR>2 {swpd+=$3; free+=$4; cache+=$6; count++} END {
printf "平均交换使用: %.1fKB, 平均空闲内存: %.1fKB, 平均缓存: %.1fKB\n",
swpd/count, free/count, cache/count
}' /tmp/vmstat_output.txt
echo -e "\n3. I/O活动分析:"
awk 'NR>2 {bi+=$9; bo+=$10; count++} END {
printf "块设备读取: %.1f blocks/s, 块设备写入: %.1f blocks/s\n",
bi/count, bo/count
}' /tmp/vmstat_output.txt
echo -e "\n4. 系统活动分析:"
awk 'NR>2 {in+=$11; cs+=$12; count++} END {
printf "中断频率: %.1f/s, 上下文切换: %.1f/s\n", in/count, cs/count
}' /tmp/vmstat_output.txt
# 清理临时文件
rm -f /tmp/vmstat_output.txt
echo -e "\n5. 性能瓶颈判断:"
if [ $(vmstat 1 2 | tail -1 | awk '{print $16}') -gt 20 ]; then
echo"⚠️ 检测到I/O等待过高,可能存在磁盘瓶颈"
fi
if [ $(vmstat 1 2 | tail -1 | awk '{print $1}') -gt $(nproc) ]; then
echo"⚠️ 运行队列过长,可能存在CPU瓶颈"
fi
四、perf – 性能计数器分析
4.1 perf 安装与基础用法
# Ubuntu/Debian 安装
sudo apt install linux-tools-common linux-tools-$(uname -r)
# CentOS/RHEL 安装
sudo yum install perf
# 查看可用事件
perf list
# 基本性能统计
perf stat -a sleep 5
# 监控特定进程
perf stat -p <PID>
# 记录性能数据
perf record -a -g sleep 10
# 生成报告
perf report
4.2 perf 常用命令详解
# 1. perf stat - 性能计数器统计
perf stat -e cycles,instructions,cache-misses,branch-misses -a sleep 5
# 2. perf record - 记录性能数据
perf record -F 99 -a -g -- sleep 30 # 全系统采样,99Hz
perf record -F 99 -p <PID> -g -- sleep 10 # 特定进程采样
perf record -e cache-misses -a sleep 5 # 特定事件采样
# 3. perf report - 分析性能数据
perf report --stdio # 文本模式报告
perf report --sort comm,dso # 按命令和共享对象排序
perf report -n --stdio # 显示样本数量
# 4. perf top - 实时性能监控
perf top # 实时监控系统
perf top -e cache-misses # 监控缓存未命中
perf top -p <PID> # 监控特定进程
# 5. perf annotate - 代码级分析
perf annotate -s <function_name> # 函数级注解
4.3 实战:perf 性能分析案例
#!/bin/bash
# perf-cpu-analysis.sh
echo"=== Perf CPU性能深度分析 ==="
# 1. 系统级性能概览
echo"1. 系统级性能计数器(运行5秒):"
perf stat -e cycles,instructions,cache-references,cache-misses,branch-misses,branches -a sleep 5 2>&1 | grep -E "(cycles|instructions|cache|branch)"
# 2. CPU使用热点分析
echo -e "\n2. CPU使用热点分析:"
echo"采集10秒性能数据..."
perf record -F 99 -a -g -- sleep 10 > /dev/null 2>&1
echo"生成热点报告:"
perf report --stdio --sort comm,dso | head -20
# 3. 缓存效率分析
echo -e "\n3. 缓存效率分析:"
perf stat -e L1-dcache-loads,L1-dcache-load-misses,L1-dcache-stores,LLC-loads,LLC-load-misses -a sleep 3 2>&1 | grep -E "(L1|LLC)"
# 4. 进程级详细分析
read -p "输入要分析的进程PID(直接回车跳过): " pid
if [ -n "$pid" ]; then
echo"分析进程 $pid 的性能特征..."
perf stat -p $pid sleep 5 2>&1 | grep -E "(seconds|task-clock|cycles|instructions)"
fi
# 5. 生成火焰图(需要额外工具)
echo -e "\n5. 高级分析建议:"
echo"生成火焰图: perf record -F 99 -a -g -- sleep 30 && perf script | ./stackcollapse-perf.pl | ./flamegraph.pl > flamegraph.svg"
echo"函数级分析: perf annotate -s <function_name>"
# 清理临时文件
rm -f perf.data
五、strace – 系统调用追踪
5.1 strace 基础用法
# 追踪命令执行
strace ls -l
# 追踪运行中的进程
strace -p <PID>
# 统计系统调用
strace -c ls -l
# 显示时间戳
strace -t ls -l
# 显示相对时间
strace -r ls -l
# 显示调用时间
strace -T ls -l
# 追踪特定系统调用
strace -e open ls -l
# 输出到文件
strace -o output.txt ls -l
5.2 strace 常用选项详解
# 常用选项组合:
strace -ttt -T -f -o trace.log <command> # 详细追踪,包含时间戳和耗时
strace -c -f <command> # 统计系统调用频率
strace -e trace=file <command> # 只追踪文件相关调用
strace -e trace=network <command> # 只追踪网络相关调用
strace -e trace=process <command> # 只追踪进程相关调用
# 高级过滤:
strace -e trace=open,read,write <command> # 追踪特定系统调用
strace -P /path/to/file <command> # 追踪特定路径的文件访问
5.3 实战:strace 系统调用分析
#!/bin/bash
# strace-system-call-analysis.sh
echo"=== Strace 系统调用分析 ==="
# 1. 基本系统调用统计
echo"1. 分析 'ls -l' 的系统调用:"
strace -c ls -l /tmp 2>&1 | head -20
# 2. 详细调用追踪
echo -e "\n2. 详细系统调用追踪(显示耗时):"
strace -T ls -l /tmp 2>&1 | head -10
# 3. 分析特定进程
read -p "输入要分析的进程PID(直接回车使用示例): " pid
if [ -n "$pid" ]; then
echo"追踪进程 $pid 的系统调用(5秒)..."
timeout 5 strace -p $pid -c 2>&1 | grep -A5 "系统调用"
else
echo"使用示例进程分析..."
strace -e open,read,write -T head -n 1 /etc/passwd 2>&1 | grep -E "(open|read|write)"
fi
# 4. 文件访问分析
echo -e "\n4. 文件访问模式分析:"
strace -e trace=file -f find /tmp -name "*.tmp" 2>&1 | grep -E "(open|stat)" | head -5
# 5. 性能瓶颈识别
echo -e "\n5. 系统调用性能分析:"
echo"运行一个测试命令并分析耗时..."
strace -c -T -f bash -c 'for i in {1..1000}; do echo "test" >/dev/null; done' 2>&1 | tail -10
# 6. 错误分析
echo -e "\n6. 错误调用分析:"
strace -e trace=open -z false 2>&1 | grep -v ENOENT | head -5
六、综合实战:CPU 性能问题排查
6.1 完整的 CPU 性能分析流程
#!/bin/bash
# comprehensive-cpu-analysis.sh
echo"=== 完整的CPU性能问题排查流程 ==="
echo"开始时间: $(date)"
echo""
# 1. 快速系统状态检查
echo"1. 📊 快速系统状态检查..."
top -bn1 | head -5
echo""
# 2. 详细性能统计
echo"2. 📈 详细性能指标采集(5秒)..."
vmstat 1 5
echo""
# 3. 进程级分析
echo"3. 🔍 进程级CPU使用分析..."
echo"CPU使用前10进程:"
ps aux --sort=-%cpu | head -11 | awk 'NR>1 {printf "%-10s %-6s %-8s %s\n", $11, $3, $1, $2}'
echo""
# 4. 系统调用分析
echo"4. 📞 系统调用频率分析..."
# 找出CPU使用最高的进程
high_cpu_pid=$(ps aux --sort=-%cpu | awk 'NR==2 {print $2}')
if [ -n "$high_cpu_pid" ]; then
echo"分析高CPU进程 $high_cpu_pid 的系统调用..."
timeout 3 strace -c -p $high_cpu_pid 2>&1 | head -15
else
echo"未找到高CPU进程"
fi
echo""
# 5. 性能计数器分析
echo"5. ⚡ 性能计数器分析(3秒)..."
perf stat -e cycles,instructions,cache-misses -a sleep 3 2>&1 | grep -E "(cycles|instructions|cache-misses|seconds)"
echo""
# 6. 上下文切换分析
echo"6. 🔄 上下文切换分析..."
vmstat 1 3 | awk 'NR>2 {cs+=$12}
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:运维星火燎原 刘军军《CPU 性能分析工具深度指南:top、vmstat、perf、strace》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论