38|性能分析(上):如何分析 Go 语言代码的性能?
孔令飞
该思维导图由 AI 生成,仅供参考
你好,我是孔令飞。
作为开发人员,我们一般都局限在功能上的单元测试中,对一些性能上的细节往往不会太关注。但是,如果我们在上线的时候对项目的整体性能没有一个全面的了解,随着请求量越来越大,可能会出现各种各样的问题,比如 CPU 占用高、内存使用率高、请求延时高等。为了避免这些性能瓶颈,我们在开发的过程中需要通过一定的手段,来对程序进行性能分析。
Go 语言已经为开发者内置了很多性能调优、监控的工具和方法,这大大提升了我们 profile 分析的效率,借助这些工具,我们可以很方便地对 Go 程序进行性能分析。在 Go 语言开发中,开发者基本都是通过内置的pprof工具包来进行性能分析的。
在进行性能分析时,我们会先借助一些工具和包,生成性能数据文件,然后再通过pprof工具分析性能数据文件,从而分析代码的性能。那么接下来,我们就分别来看下如何执行这两步操作。
生成性能数据文件
要查看性能数据,需要先生成性能数据文件。生成性能数据文件有三种方法,分别是通过命令行、通过代码和通过net/http/pprof包。这些工具和包会分别生成 CPU 和内存性能数据。
接下来,我们就来看下这三种方法分别是如何生成性能数据文件的。
通过命令行生成性能数据文件
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了如何使用 Go 语言内置的性能调优和监控工具来分析代码性能。通过命令行、代码和`net/http/pprof`包三种方法生成CPU和内存性能数据文件,并提供了相应的代码示例。文章还介绍了使用`go tool pprof`工具进行性能分析的流程,并演示了如何生成性能数据文件,并使用不同手段进行性能分析,包括分析采样图、火焰图以及使用`go tool pprof`交互模式查看函数CPU和内存消耗数据。总的来说,本文内容详实,适合开发人员快速了解Go语言代码性能分析的方法和工具,对于提升程序性能具有实际指导意义。文章内容涵盖了CPU性能分析、采样图分析、火焰图分析以及交互模式查看详细数据,为读者提供了全面的性能分析方法和工具。文章通过实际案例展示了如何通过性能分析工具找出代码中的性能瓶颈,并给出了优化建议,使读者能够更好地理解和应用所学知识。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》,新⼈⾸单¥68
《Go 语言项目开发实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(8)
- 最新
- 精选
- 柠柠因为被调用函数callee 存在1 个或多个caller,如果只有一个 caller,则累积时间相等,否则,单一的 caller 中统计的时间小于 callee 的累积调用时间。
作者回复: 对的!
2021-08-233 - 夏夜星语老师问一下,如果线上正在运行的一个Golang进程出现CPU占用过高的情况,这个时候怎么来不停止进程,也能分析出是哪个函数哪块代码出问题了,能做到嘛?
作者回复: 可以看下这一讲中 《通过net/http/pprof生成性能数据文件》这种方式,对外暴露/profile接口,通过这个接口来实时获取性能文件,分析代码性能
2021-09-262 - yandongxiao总结: 性能调优的两个步骤:生成性能数据文件 & 性能分析。 性能数据文件有三种生成方式:benchmark、import package, net/http/pprof 包 性能分析主要包括:CPU性能分析、MEM性能分析 CPU采样:频率是10ms一次,采样一次调用堆栈; MEM采样:不管采样频率如何,只要字节被分配且数量足够,都会被采集到。 内存分析手段:采样图、火焰图、交互模式。推荐采用火焰图。 火焰图:调用关系从上到下,方格越大代表耗时越长。
作者回复: 666
2021-12-041 - NING老师好,请教一个问题,最近压测过程中发现一个奇怪的问题,压测过程中内存基本比较稳定,压测结束后,内存降低一段时间后,会慢慢增长,增长到压测高峰的位置,期间已经没有请求过来,golang 编译版本是1.16,后面内存一直保持压测的高峰值,用pprof分析,inuse_space 比 RSS低很多
作者回复: 信息有点少,不太好定位哈,加老师微信,一起看看
2022-09-27归属地:广东 - Realm问题1猜测:runtime.schedule 会让出cpu,会保留上下文环境,以便下次调度回来得到执行机会,会有额外的开销?还请老师指点!
作者回复: 直接COPY读者的留言给你参考下:“因为被调用函数callee 存在1 个或多个caller,如果只有一个 caller,则累积时间相等,否则,单一的 caller 中统计的时间小于 callee 的累积调用时间。”
2021-08-21 - 静心这一节很实用,也比较细致全面。2021-11-032
- Benson_Geek再多写个go tool trace排查慢接口的就好了2022-01-091
- 随风而过pprof 工具神奇 赞2021-09-08
收起评论