分析进程性能问题,通常需要系统化地从“资源瓶颈 → 进程行为 → 代码/逻辑”逐层定位。下面给你一套实用、可操作的分析思路和常用工具(以 Linux 为主,其他系统思路类似)。
先搞清楚是哪一类问题:
不同表现,分析路径不同。
top
htop
关注:
%CPUload average进一步:
mpstat -P ALL 1
看是否是:
free -h
cat /proc/meminfo
重点:
available 而非 free进程内存:
ps -o pid,rss,vsz,comm -p <pid>
磁盘:
iostat -x 1
看:
%utilawait网络:
sar -n DEV 1
iftop
ps -eo pid,ppid,stat,%cpu,%mem,comm | grep <proc>
状态含义:
R:运行D:不可中断睡眠(常是 IO)S:睡眠Z:僵尸top -H -p <pid>
找到高 CPU 线程 ID(十进制)
转成十六进制:
printf "%x\n" <tid>
使用 perf:
perf record -F 99 -p <pid> -g -- sleep 30
perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > cpu.svg
可看到:
strace -p <pid> -c
strace -p <pid> -T -e trace=network,read,write
看是否在:
perf lock
或:
cat /proc/<pid>/stack
结合 top -H 看是否大量线程在 futex
valgrind --tool=memcheck
或:
ps -o min_flt,maj_flt -p <pid>
常见原因:
vmstat 1
看:
cs(context switch)r(run queue)网络:
| 现象 | 优先检查 |
|---|---|
| CPU 100% | perf / top -H |
| 内存涨不停 | RSS + valgrind |
| IO 慢 | iostat / strace |
| 卡死 | D 状态 / stack |
| 并发低 | cs / lock / 线程模型 |
如果你愿意,可以告诉我:
我可以直接给你针对性的分析命令和解读。