性能优化与解bug不同,对工程师的技术广度和技术深度有所要求。性能问题不仅包含代码问题,还包括容器、操作系统、网络、存储、文件系统等问题。
性能优化的痛点:
无法确定性能瓶颈点
性能优化的分析思路不明确
如何选择性能优化的分析工具
性能优化流程
准备阶段:主要工作是是通过性能测试,了解应用的概况、瓶颈的大概方向,明确优化目标;
分析阶段:通过各种工具或手段,初步定位性能瓶颈点;
调优阶段:根据定位到的瓶颈点,进行应用性能调优;
测试阶段:让调优过的应用进行性能测试,与准备阶段的各项指标进行对比,观测其是否符合预期,如果瓶颈点没有消除或者性能指标不符合预期,则重复步骤2和3。
通过压测或系统日常监控确定优化目标,如数据库、内存等;通过采集系统指标确定性能瓶颈点;执行调优然后验证优化效果;重复执行优化,直到达到优化目标。
注意事项
import _ "net/http/pprof"
http.ListenAndServe("localhost:8080", nil)
import "net/http/pprof"
mux.HandleFunc("/debug/pprof/", pprof.Index)
mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
mux.HandleFunc("/debug/pprof/profile", pprof.Profile)
mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
mux.HandleFunc("/debug/pprof/trace", pprof.Trace)
go tool pprof http://127.0.0.1:8080/debug/pprof/profile\?seconds\=30
go tool pprof -alloc_space http://127.0.0.1:8080/debug/pprof/heap
日志里有有采集数据的保存路径 Saved profile in /Users/xxx/pprof/pprof.xxx.samples.cpu.002.pb.gz
go-torch /Users/xxx/pprof/pprof.xxx.samples.cpu.002.pb.gz
curl http://127.0.0.1:8080/debug/pprof/profile >> app_cpu.profile
curl http://localhost:8080/debug/pprof/heap >> app_heap.profile
go-torch -u http://127.0.0.1:8080 -p > torch.svg
CPU的火焰图,需要优化的点是比较平摊的区域。