技术 · 性能观察
28:46
1080P
性能之巅trace:用一条时间线读懂程序的真实开销
视频简介
一次线上接口变慢,常常不是某一行代码突然变坏,而是请求经过的许多环节一起拉长了等待时间。本期从性能分析里的 trace 入手,沿着时间轴拆开一次请求:它何时进入线程、在哪里等待、又是怎样把 CPU 时间花在真正的工作上。
我们会用一组容易复现的场景,讲清楚火焰图与调用链各自适合回答什么问题,并演示如何从调度、锁竞争、磁盘与网络 I/O 中找线索。最后把采集成本、采样误差和结果验证放回排查流程里,帮助你从“感觉变慢”走到有证据的性能结论。
本期要点 / 时间轴
00:00从一次接口延迟告警开始,明确要回答的问题
04:18trace、采样与调用链:数据分别从哪里来
09:42读懂时间线上的线程状态与等待区间
15:06把火焰图和具体请求路径对应起来
21:33识别锁竞争、I/O 阻塞和调度延迟
26:10复测、对照与采集开销的边界
以前只盯着 CPU 火焰图,这次才发现请求大半时间都在等锁,时间线一摊开真的清楚很多。
把采样误差单独讲出来很有必要,之前拿一次短采样就下结论,后来复测完全不是同一个热点。
时间戳和线程状态对上之后,之前很玄学的“偶发卡顿”终于有了能追下去的方向。
讲得挺接地气,尤其是先提出假设再选工具这段,排查时少走不少弯路。
网络等待在图上出现的那一段看得我恍然大悟,原来服务端 CPU 低不等于请求没有问题。
想问下这种线程等待很短但频率很高的情况,通常需要拉长采集时间还是提高采样频率?
可以先保证覆盖到问题发生的完整周期,再根据目标事件调整采样;短而密的等待也要结合总次数看。
收藏了,最近正好要给一个旧服务做性能回顾,按视频里的步骤先画出请求路径。