爱上开源之golang入门至实战第三章-性能分析PPROF

网友投稿 724 2022-11-22

爱上开源之golang入门至实战第三章-性能分析PPROF

爱上开源之golang入门至实战第三章-性能分析PPROF

3.4 性能分析工具(PPROF)

如同上一节内容介绍的,不论哪种语言,我们在进行开发的时候,都必须致力于能够尽可能的提升程序的运行效率和稳定。Golang提供了工具包PPROF(Program Profiling),Golang Pprof是一种对golang开发的程序进行可视化和分析性能数据的工具。

3.4.1 工作原理

性能分析的工作原理大致上都是类似的;从过程上都包括两个部分

性能数据样本采集样本数据的分析

golang pprof也由这两个过程组成,不同的过程,由不同的组成部分实现;在性能数据样本采集的过程中;golang pprof通过在运行程序中引入pprof包,并进行相关调用的方式,搜集被分析程序在运行时刻一系列的性能概要信息的采样数据。并根据产生的采样数据生成proto格式的性能采集报告,采集数据报告里包含调用堆栈信息以及性能样本。我们可以对照golang里的​​"runtime/pprof"​​​包和​​“net/可以了解到采集报告里数据格式;这个过程可以称为性能数据样本收集。

golang pprof提供命令行工具,可以对采集到的样本数据,进行可视化和性能数据分析。

golang提供了两种性能数据样本收集和分析方式,

本地文件保存;在pprof采集性能数据样本时,直接把数据保存到指定的文件地址,这种方式比较适合run once的应用程序,程序运行时,保存到文件,程序运行结束后,使用pprof分析工具从本地文件进行分析。对于一些后台服务或者是web服务的程序,上面的这种方式就不适用了;pprof提供了另一种方式,通过安装

安装pprof分析工具(分析工具,命令行可以执行)

go install github.com/google/pprof@latest

安装Graphviz;这是个可选安装;如果需要图形化的展示分析结果,就必须安装此软件,并配置到相关路径,pprof的图形化分析依赖此组件

在官方网站进行-;window下用户在网上- windows_10_cmake_Release_graphviz-install-3.0.0-win64.exe

有关图形化

由于网络问题,可能导致Graphviz的-出现问题,而无法成功的进行安装;也无法使用pprof的图形化的功能;图形化是把数字和关系通过图像的方式,展示出来,里面的数据信息显示和pprof的可视化内容一样;所以相对于图形化而言,最重要的还是要会看pprof里各项数据指标所表达出来的含义;以及其所对应反馈出来的问题;而这种重要的两点,图形化也无法展示;没有安装好Graphviz完全没有什么实质性的损失;数据才是真正的本质。

3.4.3 采集数据

在前面一节讲解pprof的原理,就提到过, pprof的数据采集方法根据不同场景的提供了两种方式

Run Over Once程序 - 采集数据保存到指定的文件路径

package mainimport ( "fmt" "os" "runtime/pprof")/**Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。*/func main() { var cpuprofile = "test-prof" // 指定保存的文件路径,当前目录的test-prof文件 f, err := os.Create(cpuprofile) if err != nil { panic(err) } // StartCPUProfile为当前进程开启CPU profile。 if err := pprof.StartCPUProfile(f); err != nil { panic("could not start CPU profile: ") } // StopCPUProfile会停止当前的CPU profile(如果有) defer pprof.StopCPUProfile() sum := 0 for i := 0; i < 100; i++ { sum += i } fmt.Printf("sum=%d\n", sum)}

运行程序

或者

在命令行里, 进入源文件目录,运行

E:>cd E:\WORK\PROJECT\git\go\golang-sample\DemoE:\WORK\PROJECT\git\go\golang-sample\Demo> go run .\hello.go

验证数据样本文件已经产生

在当前文件下,产生如程序里指定的test-prof文件

Run Along Service(后台服务或者web服务) -- 通过Http的方式提供采集数据源

这种方式是专门针对后台运行或者长时间运行的服务类程序,这类方式,通过提供 _ "net/nil)

查看​​源文件​​'net/init() { Index) Cmdline) Profile) Symbol) Trace)}

​​技巧​​

默认的ServerMetux就可以开启PProf,如果是自己定制的ServerMetux;进行包装后才能实现Idea有非常友好的代码浏览功能;用来看源代码非常的方便

3.4.4 性能分析

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【Rust日报】2022-02-15 cargo-nextest:全新版本的 test runner
下一篇:Android系统 10.0 AOSP源码编译(二):AOSP源码下载
相关文章

 发表评论

暂时没有评论,来抢沙发吧~