什么是pprof?
代码上线前可以通过压测可以获知系统的性能,例如每秒能处理的请求数,平均响应时间,错误率等指标。可以对性能有初步的估计
但是压测是线下的模拟流量,线上可能会遇到高并发、大流量,不靠谱的上下游,突发的尖峰流量等等场景,这些都是不可预知的。
线上突然大量报警,接口超时,错误数增加,除了看日志、监控,就是用性能分析工具分析程序的性能,找到瓶颈。当然,一般这种情形不会让你有机会去分析,降级、限流、回滚才是首先要做的,要先止损。回归正常之后,通过线上流量回放,或者压测等手段,制造性能问题,再通过工具来分析系统的瓶颈。
一般而言,性能分析主要关注 CPU、内存、磁盘 IO、网络这些指标。
Profiling 是指在程序执行过程中,收集能够反映程序执行状态的数据。在软件工程中,性能分析(performance analysis,也称为 profiling),是以收集程序运行时信息为手段研究程序行为的分析方法,是一种动态程序分析的方法。
1. 数据采样
pprof 采样数据主要有三种获取方式:
- runtime/pprof: 采集程序(非server)的运行数据,手动调用runtime.StartCPUProfile或者runtime.StopCPUProfile等API来生成和写入采样文件,灵活性高
- net/http/pprof: 采集HTTP server的运行数据,通过 http服务获取Profile采样文件,简单易用,适用于对应用程序的整