优化编码和pprof | 青训营笔记

50 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

高质量编程

高质量编程的要求有以下几点:

  • 正确性:是否考虑各种边界,错误的调用是否能够处理
  • 可靠性:异常情况或者错误的处理策略是否明确,依赖的服务出现异常是否能够处理
  • 简洁:逻辑是否简单,后续调整功能或新增功能是否能够快速支待
  • 清晰:其他人在阅读理解代码的时候是否能清楚明白重构或者修改功能是否不会担心出现无法预料的问题

PProf

想要进行性能优化,首先瞩目在 Go 自身提供的工具链来作为分析依据

  • runtime/pprof:采集程序(非 Server)的运行数据进行分析
  • net/http/pprof:采集 HTTP Server 的运行时数据进行分析 pprof 是用于可视化和分析性能分析数据的工具

pprof 以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)

支持使用模式

image.png

  • Report generation:报告生成
  • Interactive terminal use:交互式终端使用
  • Web interface:Web 界面

可以做用获取的信息

  • CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置
  • Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏
  • Block Profiling:阻塞分析,记录 goroutine 阻塞等待同步(包括定时器通道)的位置
  • Mutex Profiling:互斥锁分析,报告互斥锁的竞争情况

通过pprof我们可以精确地定位到影响程序效率的代码在哪里。 可以看以下文章了解pprof [](go的性能分析:pprof工具 - 腾讯云开发者社区-腾讯云 (tencent.com))