Go语言学习6 | 青训营笔记

87 阅读2分钟

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

一、课程主要内容

1.性能优化的实战演练

二、课程具体内容

1.pprof

pprof适用于可视化性能数据分析的工具,可以指导在程序的什么地方占用了多少CPU和内存,在golang的开发过程中是一个大杀器般的工具。

2.性能优化要求

  • 要依靠数据而不是猜测
  • 要定位到最大瓶颈
  • 不要过早优化
  • 不能过度优化

3.性能优化实例演习

首先我们使用go get命令在github上获取实例,或者直接在github上下载该实例

go get -d github.com/wolfogre/go-pprof-practice`

运行这个实例后可以看见工作台在不停地打印日志,保持程序运行,打开浏览器访问http://localhost:6060/debug/pprof/

699b70b9ef6fb586e66e8d696153fe1f7392c0639c849026af556911ee29d6a4.jpg

  • allocs:内存分配情况的采样信息
  • block:阻塞操作的采样信息
  • cmdline:显示程序启动命令与启动参数
  • goroutine:当前所有协程的堆栈信息
  • heap:堆上内存使用情况的采样信息
  • mutex:锁争用情况的采样信息
  • profile:CPU占用情况的采样信息
  • threadcreate:系统线程创建情况的采样信息
  • trace:系统运行跟踪信息

通过任务管理器我们可以发现该实例具有较高的cpu占用和内存占用,我们可以用

go tool pprof http://localhost:6060/debug/pprof/profile

来进入一个交互式终端,再使用top命令查看CPU占比较高的调用

2.jpg

此时可以发现是github.com/wolfogre/go-pprof-practice/animal/felidae/tiger.(*Tiger).Eat导致了CPU占用过高,输入list eat查看问题具体在哪一个位置。

3.jpg 可见问题出在第24行,出现了多次无意义的循环,将其注释即可。

接下来查看内存占用。

go tool pprof http://localhost:6060/debug/pprof/heap

然后再次使用top``list来定位问题代码,即可解决问题代码