温馨提示×

怎样分析进程性能

小樊
34
2026-10-06 12:17:42
栏目: 编程语言

分析进程性能是系统调优、故障排查和容量规划中的核心工作。下面从思路、工具、指标、实战步骤四个层面,系统讲讲怎样分析进程性能。


一、分析思路(先宏观,后微观)

一般遵循以下顺序:

  1. 整体系统是否瓶颈(CPU / 内存 / IO / 网络)
  2. 哪个进程是热点进程
  3. 该进程内部问题在哪
    • CPU 计算密集?
    • 内存泄漏 / 频繁 GC?
    • 锁竞争 / 上下文切换?
    • 磁盘或网络 IO 等待?
  4. 定位到代码或系统调用级别

二、关键性能指标(看什么)

1. CPU 相关

  • CPU 使用率(user / system / iowait)
  • 上下文切换次数(cs)
  • 运行队列长度(load average)
  • 单进程 CPU 占用

2. 内存相关

  • RSS(常驻内存)
  • VIRT(虚拟内存)
  • 缺页异常(minor / major page fault)
  • 内存增长趋势(是否泄漏)

3. IO 相关

  • 磁盘读写速率
  • IO 等待时间
  • 进程是否阻塞在 IO

4. 线程 / 锁

  • 线程数
  • 锁等待时间
  • 软中断 / 硬中断

三、常用分析工具(Linux 为例)

1. 快速定位进程

top
htop
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu

2. CPU / 系统整体

vmstat 1
mpstat -P ALL 1
uptime

3. 进程级深入

pidstat -u -p <pid> 1     # CPU
pidstat -r -p <pid> 1     # 内存
pidstat -d -p <pid> 1     # IO
pidstat -w -p <pid> 1     # 上下文切换

4. 线程级分析

top -H -p <pid>
ps -T -p <pid>

5. 系统调用级

strace -p <pid>
strace -c -p <pid>

6. 火焰图 / 性能剖析(最重要)

perf top -p <pid>
perf record -p <pid> -g
perf report

或生成火焰图(Flame Graph)

7. 内存分析

pmap -x <pid>
cat /proc/<pid>/status
valgrind(开发阶段)

四、典型问题分析示例

场景 1:CPU 很高

  • top 看是否 user 高
  • perf top 看热点函数
  • 是否死循环 / 正则 / 序列化

场景 2:CPU 不高但慢

  • 看 iowait
  • pidstat -d 看 IO
  • strace 看是否在等网络/锁

场景 3:内存持续增长

  • pidstat -r 看 RSS
  • pmap 看哪段内存大
  • 是否缓存未释放 / 对象池问题

场景 4:线程多、响应慢

  • pidstat -w 看上下文切换
  • top -H 看线程
  • 锁竞争或频繁 GC

五、通用分析流程(可直接用)

1. top / htop        → 找异常进程
2. pidstat           → 确认 CPU / MEM / IO
3. top -H -p PID     → 是否线程问题
4. perf / strace     → 定位函数或系统调用
5. 火焰图            → 直观看热点
6. 代码 / 配置优化

如果你愿意,可以告诉我:

  • 使用的系统(Linux / Windows)
  • 语言(Java / C++ / Go / Python)
  • 具体问题现象(卡顿 / 高 CPU / 内存涨)

我可以给你针对性的分析命令和解读方法。

0 踩