go语言——高质量编程

48 阅读2分钟

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

go语言——高质量编程之性能分析工具pprof(上)

什么样的代码可以称为高质量的代码?

  1. 编写的代码能够达到正确可靠、简洁清晰、无性能隐患的目标就能称之为高质量代码。
  2. 实际应用场景千变万化,各种语言的特性和语法各不相同,但是高质量编程遵循的原则是相通的。
  3. 高质量的编程需要注意以下原则:简单性、可读性、生产力。

性能分析工具pprof

说明

  • 希望知道应用在什么地方耗费了多少CPU、Memory

  • pprof是用于可视化和分析性能分析数据的工具

  • pprof 功能简介

  • pprof 排查实战

  • pprof 的采样过程和原理

性能分析工具pprof-功能简介

具体pprof有哪些内客?可以看下图片分析部分-有两种方式 具体的工具-可以在runtime/pprof中找到源码,同时Golang的http标准库中也对pprof做了-些封装,能让你在http服务中直接使用它采样部分-它可以采样程序运行时的CPU、堆内存、goroutine、锁竞争、阻塞调用和系统线程的使用数据 展示-用户可以通过列表.调用图、火焰图、源码、反汇编等视图去展示采集到的性能指标。方便分析 因为pprof的功能比较多,接下来通过一个实践项目来熟悉pprof工具的使用

image.png

性能分析工具pprof-排查实战

搭建pprof 实践项目

image.png

image.png

在浏览器中打开http://localhost:6060/debug/pprof 可以看到这样的页面,这就是我们刚刚引入的net/http/pprof注入的入口了。 页面上展示了可用的程序运行柔样数据,下面也有简单说明,分别是;allocs:内存分配情况 blocks:阻塞操作情况cmdline:程序启动命令及 goroutine:当前所有goroutine的堆栈信息heap:堆上内存使用情况(同alloc) mutex:锁竞争操作情况 profile: CPU占用情况 threadcreate:当前所有创建的系统线程的堆栈信息trace:程序运行跟踪信息 image.png 看到的数据可读性很差,长这样,可以看出一些信息但很难阅读它,所以一会儿我们会借助pprof工具帮我们「阅读」这些指标。

image.png

cmdline显示运行进程的命令,threadcreate比较复杂,不透明,trace需要另外的工具解析,暂不涉及炸弹在CPU,堆内存,goroutine,锁竞争和阻塞操作上埋了炸弹,可以使用pprof工具进行分析

image.png