一个正常的火焰图,应该呈现出如官网给出的样例(官网的火焰图是抓 C 级别函数):从上图可以看出,正常业务下的火焰图形状类似的“山脉”,“山脉”的“海拔”表示 worker 中业务函数的调用深度,“山脉”的“长度”表示 worker 中业务函数占用 CPU 的比例。下面将用一个实际应用中遇到问题抽象出来的示例( CPU 占用过高)来说明如何通过火焰图定位问题。
一般来说,当发现 CPU 的占用率和实际业务应该出现的占用率不相符,或者对 nginx worker 的资源使用率( CPU ,内存,磁盘 IO )出现怀疑的情况下,都可以使用火焰图进行抓取。另外,对 CPU 占用率低、吐吞量低的情况也可以使用火焰图的方式排查程序中是否有阻塞调用导致整个架构的吞吐量低下。