Linux 性能排查工具箱:从 top 到 perf 的进阶指南

Linux Performance Debugging Toolkit: From top to perf Advanced Guide

| David | 2026-09-11T21:53:00

整理了我日常排查线上性能问题最常用的 Linux 工具,从基础的 top、vmstat 到进阶的 perf、bpftrace,按场景分类讲解。

Compilation of essential Linux performance debugging tools from basic (top, vmstat) to advanced (perf, bpftrace), organized by troubleshooting scenario.

线上服务出性能问题的时候,第一反应不应该是看代码,而是先用系统工具定位瓶颈在哪。整理一下我最常用的工具。 CPU 问题 top / htop 最基础的工具,快速看哪个进程 CPU 高。htop 比 top 好用,支持搜索和排序。 # 按 CPU 排序 top -o %CPU # htop 直接按 F6 选排序字段 pidstat 看单个进程的 CPU、IO、内存详情: # 每秒输出一次,看进程 12345 的 CPU 使用 pidstat -p 12345 1 # 看线程级别的 CPU 使用 pidstat -p 12345 -t 1 perf 定位 CPU 热点函数: # 采样 30 秒 perf record -g -p 12345 -- sleep 30 # 生成报告 perf report # 生成火焰图 perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg 火焰图是排查 CPU 问题的终极武器,一眼就能看出时间花在哪个函数上。 内存问题 free / vmstat # 看内存概况 free -h # 每秒输出,重点看 si/so(swap in/out) vmstat 1 如果 si/so 持续不为 0,说明内存不够用在换页,需要加内存或者查内存泄漏。 pmap 看单个进程的内存映射: pmap -x 12345 | sort -k2 -n -r | head -20 IO 问题 iostat # 每秒输出,重点看 %util 和 await iostat -x 1 %util 接近 100% 说明磁盘饱和了;await 高说明 IO 延迟大。 iotop 看哪个进程在做 IO: iotop -o # 只显示正在做 IO 的进程 网络问题 ss / netstat # 看 TCP 连接状态分布 ss -s # 看 TIME_WAIT 数量 ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn tcpdump 抓包分析: # 抓指定端口的包 tcpdump -i eth0 port 8080 -w capture.pcap # 用 Wireshark 打开分析 一般排查顺序 遇到性能问题,我通常这样排查: top 看 CPU、内存大盘 vmstat 1 看系统整体是 CPU 瓶颈还是 IO 瓶颈 根据瓶颈类型用对应工具深挖 最后用 perf 或 strace 定位到代码级别


Essential Linux performance debugging tools organized by scenario. CPU top/htop for overview, pidstat for per-process/thread detail, perf + flame graphs for function-level hotspot analysis. Memory free/vmstat for overview (watch si/so for swap activity), pmap for per-process memory mapping. IO iostat for disk utilization and latency, iotop for per-process IO. Network ss for connection state distribution, tcpdump for packet capture analysis. General order: top → vmstat → specialized tool → perf/strace for code-level diagnosis.

← Back to News