编程质量优化技巧和性能分析工具pprof的使用 | 青训营笔记

74 阅读3分钟

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

本篇文章主要是收集了笔者在学习今天的课程,在学习了一些golang的编程规范后,总结了一些编程质量优化技巧;和golang项目中使用性能分析工具pprof的注意点。

编程质量优化技巧和性能分析工具pprof的使用

编程质量优化技巧

使用make指令时尽量标注容量

在使用slice、map等结构时,需要预分配内存,则在使用 make() 初始化切片时应该尽可能地提供对应的容量信息。

data := make([]int, 0, size) 
data := make(map[int]int, size)

使用 strings.Builder作为字符串拼接工具

使用 strings.Builder进行字符串拼接,效率比bytes.Buffer和原生str相加更高。

var builder strings.Builder
for i := 0; i < n; i++ {
    builder.WriteString(str)
}
return builder.String()

使用空结构体

使用空结构体节省内存,而不是使用nil、false等作为空值。空结构体不占据内存空间。

以上编程质量优化技巧的事例演示项目:编程质量优化技巧演示项目

性能分析工具pprof的使用

pprof是一个用于可视化和分析性能分析数据的工具,使用golang实现。

但是,pprof 是当程序占用资源异常时才需要启用的工具,且即使发现有一些资源异常占用,也会通过排查代码快速定位,这也导致 pprof 需要上战场的机会少之又少。但是,掌握好pprof的使用方法还是有必要的,毕竟能可视化地查看当前golang项目的各个函数进程的cpu占有、运行时间占用等详细情况,在某个时候还是有很大作用的。

pprof的两种使用方法

  • 通过简单的原生Web界面(pprof自带)和终端使用命令

先引入包"net/http/pprof",然后使用代码

http.ListenAndServe("$host:$port", nil)

就可以访问原生web了,网址为:http://127.0.0.1:6060/debug/pprof/ 。在其中可以简略查看CPU使用等情况。

此时还可以使用交互式终端使用命令查看更多信息,例如运行以下命令:

go tool pprof http://localhost:6060/debug/pprof/profile?seconds=60

就可以在60秒后查看这段时间内cpu使用的情况。更多命令可以查看官网。

  • PProf 可视化界面

    • 第一种方法:

    先在单元测试文件的目录中,生成该单元测试文件对应的cpu.prof文件,可以运行以下代码:

    go test -bench=. -cpuprofile=cpu.prof
    

    然后就可以调用指令,根据cpu.prof文件启动可视化界面:

    go tool pprof -http=:$port cpu.prof
    
    • 第二种方法:

    直接安装pprof插件,按照相同的步骤生成cpu.prof文件然后也可以启动可视化界面了。

在PProf 可视化界面中,可以以网状图、表格、火焰图等多种可视化显示,形象地展示当前golang项目的各个函数进程的cpu占有、运行时间占用等详细情况。

另外,笔者的测试环境里,在下载graphviz后,idea内的终端奇怪地用不了graphviz库的dot指令,而外部终端却可以。很奇怪,等之后再继续研究。