Go 语言核心 36 讲
郝林
《Go 并发编程实战》作者,前轻松筹大数据负责人
79610 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
Go 语言核心 36 讲
15
15
1.0x
00:00/00:00
登录|注册

48 | 程序性能分析基础(上)

StopCPUProfile
StartCPUProfile
go tool pprof
protocol buffers
go test命令
阻塞概要文件(Block Profile)
内存概要文件(Mem Profile)
CPU概要文件(CPU Profile)
go tool trace
go tool pprof
runtime
runtime/trace
net/http/pprof
runtime/pprof
StopCPUProfile
采样频率
runtime/pprof.StartCPUProfile
性能分析工具
生成概要文件
概要文件类型
标准工具
性能分析API
CPU概要信息采样
Go程序性能分析
性能分析基础

该思维导图由 AI 生成,仅供参考

作为拾遗的部分,今天我们来讲讲与 Go 程序性能分析有关的基础知识。
Go 语言为程序开发者们提供了丰富的性能分析 API,和非常好用的标准工具。这些 API 主要存在于:
runtime/pprof
net/http/pprof
runtime/trace
这三个代码包中。
另外,runtime代码包中还包含了一些更底层的 API。它们可以被用来收集或输出 Go 程序运行过程中的一些关键指标,并帮助我们生成相应的概要文件以供后续分析时使用。
至于标准工具,主要有go tool pprofgo tool trace这两个。它们可以解析概要文件中的信息,并以人类易读的方式把这些信息展示出来。
此外,go test命令也可以在程序测试完成后生成概要文件。如此一来,我们就可以很方便地使用前面那两个工具读取概要文件,并对被测程序的性能加以分析。这无疑会让程序性能测试的一手资料更加丰富,结果更加精确和可信。
在 Go 语言中,用于分析程序性能的概要文件有三种,分别是:CPU 概要文件(CPU Profile)、内存概要文件(Mem Profile)和阻塞概要文件(Block Profile)。
这些概要文件中包含的都是:在某一段时间内,对 Go 程序的相关指标进行多次采样后得到的概要信息。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了Go程序性能分析的基础知识和相关工具。首先,文章详细解释了性能分析API和标准工具的使用,以及Go语言中用于分析程序性能的三种概要文件类型。接着,文章重点讲解了如何生成概要文件,以及使用`runtime/pprof`包中的API对CPU概要信息进行采样的过程。此外,还介绍了`StartCPUProfile`函数的工作原理和采样频率的设定,以及`StopCPUProfile`函数的作用。通过解释CPU概要信息的采样工作,读者对该主题有了一定的认识。总的来说,本文为读者提供了深入了解Go程序性能分析的基础知识和工具的机会,为他们在实践中更好地应用这些知识提供了指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言核心 36 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 自由
    跟着老师的 cpuProfile 示例代码完美运行,使用 go tool pprof 反编译 .out 文件,进入一个交互界面后,输入 Help 可以看到很多协助分析 CPU 性能的选择参数,我使用了其中的 top,可以清晰的看到被测试的代码中,哪一行代码 CPU 耗时最长,再通过 list 可以快速查看其中的代码。 请问老师,交互界面中还有哪些`秘密武器`的选项帮助我分析代码呢?

    作者回复: 看这里:https://github.com/google/pprof

    2021-09-12
    2
  • jxs1211
    运算指令和go语言代码直接的对应关系是否,一条指令对应一行go代码吗

    作者回复: 肯定不是一一对应的,一行Go代码对应几条、十几条甚至几十条机器指令。

    2022-06-09
  • 吴超
    您这个和我在程序中直接 import _ "net/http/pprof" ,然后开一个HTTP服务查看pprof有什么区别啊 。 下面是http://127.0.0.1:6060/debug/pprof/HTTP服务返回的结果 /debug/pprof/ Types of profiles available: Count Profile 2 allocs 0 block 0 cmdline 1029 goroutine 2 heap 0 mutex 0 profile 16 threadcreate 0 trace full goroutine stack dump Profile Descriptions: allocs: A sampling of all past memory allocations block: Stack traces that led to blocking on synchronization primitives cmdline: The command line invocation of the current program goroutine: Stack traces of all current goroutines heap: A sampling of memory allocations of live objects. You can specify the gc GET parameter to run GC before taking the heap sample. mutex: Stack traces of holders of contended mutexes profile: CPU profile. You can specify the duration in the seconds GET parameter. After you get the profile file, use the go tool pprof command to investigate the profile. threadcreate: Stack traces that led to the creation of new OS threads trace: A trace of execution of the current program. You can specify the duration in the seconds GET parameter. After you get the trace file, use the go tool trace command to investigate the trace.
    2018-11-30
    1
    9
  • lesserror
    先听一遍音频,对课程内容做个简单的了解。然后再把课程demo或者go源码文件看看,边看边结合文字说明。就很清晰明了了。
    2021-09-03
    2
    3
  • 虢國技醬
    打卡
    2019-08-24
    2
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部