高质量编程与性能调优8 | 青训营笔记

55 阅读2分钟

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

  • 既然性能调优前提是对应用程序性能表现有实际的数据指标,那么有什么工具能够获得这种数据呢? 对于go程序,有一个很方便的工具就是pprof,它能 接下来我们从三个方面来熟悉下pprof工具
  • 具体pprof有哪些内容?分析部分-有两种方式 具体的工具-可以在runtime/pprof中找到源码,同时Golang的http标准库中也对pprof做了-些封装,能让你在http服务中直接使用它 采样部分-它可以采样程序运行时的CPU、堆内存、goroutine、 锁竞争、阻塞调用和系统线程的使用数据 展示-用户可以通过列表、调用图、火焰图、源码、反汇编等视图去展示采集到的性能指标。方便分析 因为pprof的功能比较多,接下来通过一个实践项目来熟悉pprof工具的使用
  • 我们的目标是熟悉pprof工具,能够排查性能问题,那么首先我们需要构造一个有问题的程序,看看如何用pprof来定位性能问题点 这里有个开源项目,已经制造了一些问题代码,需要我们进行排查 大家用pprof示例命令实验下能否正常打开pprof页面,是否缺少graphviz的组件 我们来看看「炸弹」程序是怎么做的。图中代码是main.go中初始化http服务和pprof接口的代码,无关逻辑有所省略。可以看到,引入了nethttpprof这个包,它会将pprof的入口注册到/debug/pprof这个路径下,我们可通过浏览器打开这个路径,来查看-些基本的性能统计。 运行「炸弹」,并等待它运行稳定
  • 在浏览器中打开http://localhost:6060/debug/pprof,可以看到这样的页面, 这就是我们刚刚引入的net/http/pprof注入的入口了。 页面上展示了可用的程序运行采样数据,下面也有简单说明,分别是: allocs:内存分配情况 blocks:阻塞操作情况 cmdline:程序启动命令及 goroutine:当前所有goroutine的堆栈信息 heap:堆上内存使用情况(同alloc) mutex:锁竞争操作情况 profile: CPU占用情况 threadcreate:当前所有创建的系统线程的堆栈信息 trace:程序运行跟踪信息