南京定制网站建设,前端电商网站设计论文,深圳市公司有哪些公司,wordpress上传doc文件Go 自带接口性能分析工具 pprof#xff0c;较为常用的有以下 4 种分析#xff1a;
CPU Profiling: CPU 分析#xff0c;按照一定的频率采集所监听的应用程序 CPU#xff08;含寄存器#xff09;的使用情况#xff0c;可确定应用程序在主动消耗 CPU 周期时花费时间的位置…Go 自带接口性能分析工具 pprof较为常用的有以下 4 种分析
CPU Profiling: CPU 分析按照一定的频率采集所监听的应用程序 CPU含寄存器的使用情况可确定应用程序在主动消耗 CPU 周期时花费时间的位置Memory Profiling: 内存分析在应用程序进行堆分配时记录堆栈跟踪用于监视当前和历史内存使用情况以及检查内存泄漏Block Profiling: 阻塞分析记录 goroutine 阻塞等待同步包括定时器通道的位置Mutex Profiling: 互斥锁分析报告互斥锁的竞争情况。
接入方式
package mainimport (net/http_ net/http/pprof
)func main() {http.ListenAndServe(0.0.0.0:6060, nil)
}它使用默认的 http.DefaultServeMux 结构注册了 /debug/pprof/ 路由在浏览器访问可以访问 CPU/Memory/Block/Mutex/Goroutine 等性能分析页面。
对于线上服务来说需要针对该路由做好限制否则可能直接暴露到系统外部造成数据安全问题。
如果是内部服务自己电脑的浏览器看不到页面就很麻烦了。而 Pyroscope 这个项目就非常爽~
它有一个非常漂亮的 UI 界面展示 Agent 采集的数据能直观地展示程序各个函数的调用耗时从而找出性能瓶颈。
架构图如下 接入方式也非常简单本地搭建服务的话macOS输入以下命令
brew install pyroscope-io/brew/pyroscope
pyroscope server对应的服务需要加入以下代码
package mainimport (github.com/pyroscope-io/client/pyroscope
)func initPyroScope() {runtime.SetMutexProfileFraction(5)runtime.SetBlockProfileRate(5)_, _ pyroscope.Start(pyroscope.Config{ApplicationName: app.ServerName, // 应用名称ServerAddress: http://pyroscope.test.com.cn, // 上报地址Logger: pyroscope.StandardLogger,Tags: map[string]string{hostname: os.Getenv(HOSTNAME)},ProfileTypes: []pyroscope.ProfileType{pyroscope.ProfileCPU,pyroscope.ProfileAllocObjects,pyroscope.ProfileAllocSpace,pyroscope.ProfileInuseObjects,pyroscope.ProfileInuseSpace,pyroscope.ProfileGoroutines,pyroscope.ProfileMutexCount,pyroscope.ProfileMutexDuration,pyroscope.ProfileBlockCount,pyroscope.ProfileBlockDuration,},})
}func main() {initPyroScope()// ...
}其中ApplicationName 和 ServerAddress 需要自行替换。
如果是本地ServerAddress 请改成 http://127.0.0.1:4040接着运行 benchmark 压测
ab -c 100 -n 10000 http://127.0.0.1:8099/api/xxx-service/v1/yyy/get_test?gid23333可以得到火焰图好漂亮啊 此时可以看到最耗时的是 HTTP 服务的调用还有 JSON 的序列化 说明我们的程序接口在某个输入参数的情况下没有出现逻辑上的瓶颈。
我们可以多变换输入参数根据业务逻辑找到最复杂最消耗性能的模块有针对性进行性能优化。 文章来源于本人博客发布于 2022-06-12原文链接https://imlht.com/archives/391/