这是我参与「第五届青训营 」笔记创作活动的第六天。
一、课程主要内容
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/
- allocs:内存分配情况的采样信息
- block:阻塞操作的采样信息
- cmdline:显示程序启动命令与启动参数
- goroutine:当前所有协程的堆栈信息
- heap:堆上内存使用情况的采样信息
- mutex:锁争用情况的采样信息
- profile:CPU占用情况的采样信息
- threadcreate:系统线程创建情况的采样信息
- trace:系统运行跟踪信息
通过任务管理器我们可以发现该实例具有较高的cpu占用和内存占用,我们可以用
go tool pprof http://localhost:6060/debug/pprof/profile
来进入一个交互式终端,再使用top命令查看CPU占比较高的调用
此时可以发现是github.com/wolfogre/go-pprof-practice/animal/felidae/tiger.(*Tiger).Eat导致了CPU占用过高,输入list eat查看问题具体在哪一个位置。
可见问题出在第24行,出现了多次无意义的循环,将其注释即可。
接下来查看内存占用。
go tool pprof http://localhost:6060/debug/pprof/heap
然后再次使用top``list来定位问题代码,即可解决问题代码