知识卡片

Pprof看样本

普通读书笔记卡 · 1488

内容

pprof 靠采样近似呈现 CPU、堆等特征而非记录每次事件:堆按 MemProfileRate 累积到阈值才记一次,CPU 靠 setitimer 以 100Hz 中断采样。它看到的是概率画像,采样频率、运行时长、程序负载都会带来偏差;工具本身有开销,与 trace/race 同开会相互干扰,读数不能直接叠加解释。

参考来源

- 位置:《Go语言底层原理剖析》第21章《调试利器:特征分析与事件追踪》21.4.1节《堆内存样本》与21.4.3节《CPU样本收集原理》 - 结论依据:原文说明"对堆内存采样时,并不是每次调用mallocgc分配堆内存都会被记录下来,这里有一个指标——MemProfileRate,当多次内存分配累积到该指标以上时,才记录一次";CPU 采样"会为setitimer函数设置中断频率为100Hz,即每秒中断100次",因此可以推出"pprof 是基于采样频率的近似画像,不是完整事件记录"的结论;17.3.2节另说明竞争检测(race)会使内存放大5~10倍、耗时放大2~20倍,佐证诊断工具本身有显著开销、会相互干扰。 - 原始内容:对堆内存采样时,并不是每次调用mallocgc分配堆内存都会被记录下来,这里有一个指标——MemProfileRate,当多次内存分配累积到该指标以上时,才记录一次……调用pprof获取CPU样本接口时,程序会为setitimer函数设置中断频率为100Hz,即每秒中断100次。这是深思熟虑的选择,由于中断也会花费时间成本,所以中断的频率不可过高。