BPF应用CPU分析:profile、threaded与火焰图
在多核服务器上,应用的CPU使用效率直接决定了吞吐量和响应时间。当应用出现CPU瓶颈时,我们需要快速定位热点代码路径,并评估多线程是否真正发挥了并行能力。BPF工具链中的profile和threaded正是为此设计的:前者通过定时采样on-CPU堆栈生成火焰图,后者按线程ID统计CPU占用分布。本文以MySQL服务器为例,演示这两个工具的使用方法、火焰图生成与解读,并讨论帧指针等关键前提。
1. profile:定时采样on-CPU堆栈
profile是BCC套件中的一个工具,它按照固定频率(如49Hz或99Hz)对所有CPU上正在运行的线程进行栈回溯采样。每次采样会记录用户态和内核态的完整调用栈,最终统计出各栈出现的次数,从而近似反映CPU时间的消耗分布。
1.1 对MySQL服务器进行采样
以下命令对MySQL进程(PID 9908)以49Hz频率采样30秒,并打印按频率排序的栈列表:
# profile -d -p $(pgrep mysqld)Sampling at49Hertz of PID