性能调试

CPU

top

1
top -H -p <PID>

只显示指定进程 的所有线程,并实时显示它们的 CPU、内存等使用情况。

1
pstack <PID>

perf

1
perf top -p <PID>

查看函数热点,采样一段时间

1
2
perf record -p <PID> -g -- sleep 10
perf report

strace

1
strace -ttT -p <PID>

火焰图

  • 安装perf

    1
    sudo apt-get install linux-tools-common linux-tools-$(uname -r)
  • 采样数据

    1
    sudo perf record -F 99 -p <PID> -g -- sleep 30

    -F 99 每秒采样 99 次
    -p 针对指定进程
    -g 采集调用栈(火焰图需要)
    – sleep 30 采样 30 秒

  • 生成调用栈

    1
    sudo perf script > out.perf
  • 下载 FlameGraph 工具

    1
    2
    git clone https://github.com/brendangregg/FlameGraph.git
    cd FlameGraph
  • 生成火焰图

    1
    2
    ./stackcollapse-perf.pl ../out.perf > out.folded
    ./flamegraph.pl out.folded > flamegraph.svg

IO

系统io

1
iostat -x 1

重点关注 await(平均等待时间)和 svctm(服务时间)。如果 await >> svctm,说明队列很长,设备忙不过来。

某个进程io

1
pidstat -d -p <PID> 1