这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
go语言——高质量编程之性能分析工具pprof(上)
什么样的代码可以称为高质量的代码?
- 编写的代码能够达到正确可靠、简洁清晰、无性能隐患的目标就能称之为高质量代码。
- 实际应用场景千变万化,各种语言的特性和语法各不相同,但是高质量编程遵循的原则是相通的。
- 高质量的编程需要注意以下原则:简单性、可读性、生产力。
性能分析工具pprof
说明
-
希望知道应用在什么地方耗费了多少CPU、Memory
-
pprof是用于可视化和分析性能分析数据的工具
-
pprof 功能简介
-
pprof 排查实战
-
pprof 的采样过程和原理
性能分析工具pprof-功能简介
具体pprof有哪些内客?可以看下图片分析部分-有两种方式 具体的工具-可以在runtime/pprof中找到源码,同时Golang的http标准库中也对pprof做了-些封装,能让你在http服务中直接使用它采样部分-它可以采样程序运行时的CPU、堆内存、goroutine、锁竞争、阻塞调用和系统线程的使用数据 展示-用户可以通过列表.调用图、火焰图、源码、反汇编等视图去展示采集到的性能指标。方便分析 因为pprof的功能比较多,接下来通过一个实践项目来熟悉pprof工具的使用
性能分析工具pprof-排查实战
搭建pprof 实践项目
- GitHub(来自Wolfogre )
- github.com/wolfogre/go…
- 项目提前埋入了一些炸弹代码,产生可观测的性能问题
在浏览器中打开http://localhost:6060/debug/pprof
可以看到这样的页面,这就是我们刚刚引入的net/http/pprof注入的入口了。
页面上展示了可用的程序运行柔样数据,下面也有简单说明,分别是;allocs:内存分配情况
blocks:阻塞操作情况cmdline:程序启动命令及
goroutine:当前所有goroutine的堆栈信息heap:堆上内存使用情况(同alloc)
mutex:锁竞争操作情况
profile: CPU占用情况
threadcreate:当前所有创建的系统线程的堆栈信息trace:程序运行跟踪信息
看到的数据可读性很差,长这样,可以看出一些信息但很难阅读它,所以一会儿我们会借助pprof工具帮我们「阅读」这些指标。
cmdline显示运行进程的命令,threadcreate比较复杂,不透明,trace需要另外的工具解析,暂不涉及炸弹在CPU,堆内存,goroutine,锁竞争和阻塞操作上埋了炸弹,可以使用pprof工具进行分析