后端go语言课程笔记|青训营笔记

47 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天,通过学习记录并总结部分知识点,不足之处请指正。 本章知识点有以下方面:

性能优化

原则:

  • 要依靠数据不是猜测
  • 要定位最大瓶颈而不是细枝末节
  • 不要过早优化
  • 不要过度优化

Go语言项目中的性能优化主要有以下几个方面:

  1. cpu profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据。
  2. memory profile:报告程序的内存使用情况
  3. block profilling:报告 goroutines 不在运行状态的情况,可以用来分析和查找死锁等性能瓶颈

常见命令有:

  • topN,查看占用资源最多的函数
  • list函数名或者weblist函数名:
  • web或者web函数名:函数被表示成不同的矩形(被调用越多,矩形越大),箭头指示函数调用链。

pprof与性能测试结合

go test命令有两个参数和 pprof 相关,它们分别指定生成的 CPU 和 Memory profiling 保存的文件:

  • -cpuprofile:cpu profiling 数据要保存的文件地址
  • -memprofile:memory profiling 数据要保存的文件地址

我们还可以选择将pprof与性能测试相结合,比如:

比如下面执行测试的同时,也会执行 CPUprofiling,并把结果保存在 cpu.prof 文件中:

go test -bench . -cpuprofile=cpu.prof

比如下面执行测试的同时,也会执行 Memprofiling,并把结果保存在 cpu.prof 文件中:

go test -bench . -memprofile=./mem.prof

需要注意的是,Profiling 一般和性能测试一起使用,这个原因在前文也提到过,只有应用在负载高的情况下 Profiling 才有意义。

总结:不同的语言对于性能处理有着不同的方式,要想对于一门语言熟练掌握,就要对其的各个方面处理的熟练,从一个小部分开始,逐步学习,逐步掌握,当熟悉之后,在自己真正需要使用的时候,才能快速选择正确的方式去处理。