Go性能优化|青训营笔记
这是我参与「第五届青训营」伴学笔记创作活动的第5天
1.benchmark
go内置性能测试工具
使用:
go test -bench=. -benchmem
结果:
2.优化建议
2.1 slice
- 尽可能使用make预分配
原因:
- 巨型切片时,用copy代替re-slice
2.2 map
- 使用make预分配
2.3 字符串处理
- 效率最高:strbuilder
拼接字符串三种方式:直接加,strbuilder,bytebuilder
原因:
- 尽量也预分配
2.4 运用空结构体
2.5 atomic
使用atomic代替锁
原因:
3.pprof
3.1 简介
3.2 实战
brew安装Graphviz,为后续在web看调试结果做准备
brew install graphviz
项目运行之后查看活动监视器,发现占用居多cpu
用pprof查看并分析资源使用情况,每一步修改一个问题,代码流程还是很清晰的
go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"
top #查看占用资源最多,主要看cpu问题
list [函数名] #查找函数
web #浏览器打开调用图
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap" #查看堆(内存)问题
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine" #查看协程问题,web页面切view可以看火焰图
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex" #查看锁问题
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block" #查看阻塞问题