Linux 性能分析与优化工具全景图
01 系统资源实时观测
| | |
| btop / bpytop | | |
| glances | 跨平台全能监控,Web 模式、API 输出、告警阈值 | |
| nmon | AIX/Linux 老牌采集器,一键输出 CSV/图表 | |
| tiptop | | |
| smem | | |
| pmap -x | 进程内存映射明细(RSS/Dirty/Anonymous) | |
| numastat | | |
| turbostat | CPU 电源状态(C-state/P-state)、温度、功耗 | |
| powertop | | |
| irqtop | | |
| nethogs | | |
| iftop | | |
| bmon | | |
| collectl | | |
| nicstat | | |
| dstat --full | | |
eBPF 实时工具(bcc-tools / bpftrace 单行)
- •
runqlat:调度延迟分布(判断 CPU 饱和还是调度问题) - •
biolatency:块设备 IO 延迟直方图 - •
ext4slower / xfsslower:文件系统慢操作追踪(>X ms) - •
cachestat / cachetop:页缓存命中率 - •
offcputime:Off-CPU 时间火焰图(阻塞分析) - •
profile:高频 CPU 采样(10ms 级火焰图)
02 应用级剖析与追踪
| | |
| perf stat | 硬件 PMU 计数器(cycles、instructions、cache-miss、branch-miss) | |
| perf sched | | |
| perf mem | | |
| perf c2c | | |
| perf lock | | |
| perf probe | | |
| uftrace | 用户态函数调用图追踪(支持 C/C++/Rust/Go) | |
| sysdig | | |
| csysdig | | |
| auditd + ausearch | | |
| trace-cmd + kernelshark | | |
| Intel VTune | | |
| AMD uProf | | |
语言级剖析工具
- • Java:
async-profiler(低开销火焰图)、arthas(阿里开源,线程/内存/JVM 全能)、jcmd、jstat、jmap - • Go:
go tool pprof、go tool trace、fgprof(全采样,含 Off-CPU) - • Python:
py-spy(无需修改代码的采样器)、austin、scalene - • Node.js:
clinic.js、0x、node --prof - • Rust:
cargo flamegraph、inferno - • 通用火焰图:
speedscope(Web 可视化)、hotspot(Linux GUI)
调试与重放
- • rr (Mozilla):确定性记录与重放,支持反向执行
- • gdb + perf:源码级热点断点与采样结合
03 压力与基准测试
| | |
| fio | 最全面的磁盘 IO 基准(同步/异步、多种引擎、混合读写) | |
| iozone | | |
| bonnie++ | | |
| filebench | 可编程文件系统工作负载(模拟邮件/Web/数据库) | |
| vdbench | | |
| pgbench | | |
| mysqlslap | | |
| hammerdb | | |
| redis-benchmark | | |
| memtier_benchmark | Redis/Memcached 高级压测(多线程、流水线、多种数据分布) | |
| wrk2 | 恒定吞吐量 HTTP 压测(Coordinated Omission 修正) | |
| k6 | | |
| iperf3 | | |
| flowgrind | | |
| stream | 内存带宽基准(Copy/Scale/Add/Triad) | |
| stressapptest | | |
| hyperfine | | |
04 参数与配置优化
| | |
| ulimit / prlimit | | |
| cgcreate / cgset / cgexec | cgroup v1 资源隔离(CPU/内存/IO/网络) | |
| systemctl set-property | systemd 托管服务的 cgroup v2 限制 | |
| systemd-cgtop | | |
| chrt | | |
| schedtool | | |
| numad | | |
| irqbalance | | |
| ethtool -G/-C/-K | | |
| tc (Traffic Control) | | |
| sysctl vm. / kernel. | | |
| blockdev | | |
| tune2fs | | |
| xfs_ 工具集 | | |
| fstrim | | |
| grubby / kernelstub | | |
| kexec | | |
| kdump + crash | | |
05 容器与云原生性能
| | |
| docker stats | | |
| crictl stats | | |
| kubectl top | | |
| cAdvisor | | |
| inspektor-gadget | K8s 节点级 eBPF 工具集(网络/IO/安全) | |
| kubectl-trace | | |
| kubectl-flame | | |
| ksniff | | |
| falco | 运行时安全与异常检测(基于 eBPF/sysdig) | |
| tetragon | | |
| kubecost | | |
| node-problem-detector | | |
inspektor-gadget 常用子命令:
| |
kubectl gadget trace tcp | |
kubectl gadget snapshot process | |
kubectl gadget profile block-io | |
06 内存深度分析
| | |
| smem -R -P | | |
| pmap -XX | | |
| memusage / memusagestat | | |
| valgrind --tool=massif | | |
| heaptrack | | |
| dhat (valgrind) | | |
| tcmalloc / jemalloc profiling | | |
| libefence | | |
| dmalloc | | |
| mtrace | | |
| Intel PCM | | |
07 网络深度诊断
| | |
| mtr | 合并 ping + traceroute,实时丢包与延迟 | |
| tracepath | 无需 root 的 traceroute,自动发现 MTU | |
| hping3 | | |
| nmap / masscan | | |
| termshark | | |
| tshark | | |
| tcpflow | | |
| tcpreplay | | |
| netsniff-ng | | |
| trafgen | | |
| iptraf-ng | 交互式网络统计(TCP/UDP/ICMP/OSPF) | |
| vnstat / vnstati | | |
| nfdump + nfsen | | |
| conntrack | | |
| ss -tanpi | | |
| tc -s qdisc show | | |
08 可观测性与持续监控
| | |
| Prometheus + node_exporter | | |
| Grafana | | |
| Thanos / Cortex / Mimir | | |
| VictoriaMetrics | | |
| InfluxDB + Telegraf | | |
| Loki + Promtail | | |
| Jaeger / Tempo / Zipkin | | |
| OpenTelemetry | 标准化 Metrics/Logs/Traces 采集 | |
| eBPF Exporter | 将 bpftrace/bcc 指标暴露给 Prometheus | |
| Netdata | | |
| Zabbix / Nagios / Icinga | | |
| Elastic Stack (ELK) | | |
| Vector.dev | | |
09 处理思路
1. 服务器突然卡死,先看什么?
→ htop / btop → vmstat 1 → iostat -xz 1 → ss -tanpi
2. 应用 CPU 高,怎么定位热点?
→ perf top → perf record -g → FlameGraph → 源码优化
3. 应用延迟高,但 CPU 不高?
→ offcputime-bpfcc → 火焰图找阻塞点 → strace -T / ltrace
4. 内存持续增长,疑似泄漏?
→ smem → pmap → valgrind massif / heaptrack → 修复
5. 磁盘 IO 高,定位元凶?
→ iotop → pidstat -d 1 → biosnoop-bpfcc → ftrace
6. 网络吞吐不达标?
→ ethtool -S → ss -i → tc -s → tcpdump → wrk2 / iperf3
7. K8s Pod 异常?
→ kubectl top → kubectl logs → kubectl gadget → kubectl flame
8. 需要长期趋势数据?
→ sar / collectl → Prometheus + Grafana → 基线告警