49 | 程序性能分析基础(下)
该思维导图由 AI 生成,仅供参考
知识扩展
问题 1:怎样设定内存概要信息的采样频率?
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了Go语言程序性能分析的基础知识和技巧,包括内存和阻塞概要信息的采样设定和获取,以及`runtime/pprof.Lookup`函数的使用方法。作者首先讨论了如何设定内存概要信息的采样频率,然后介绍了获取阻塞概要信息的方法,包括采样频率设定和获取阻塞概要信息的具体步骤。此外,文章还详细解释了`runtime/pprof.Lookup`函数的正确调用方式,以及不同参数值对应的概要信息收集方法和输出规格。另外,文章还介绍了如何为基于HTTP协议的网络服务添加性能分析接口,包括使用`net/http/pprof`包提供的程序实体来实现性能分析接口的嵌入。总的来说,本文内容丰富,对于需要进行程序性能优化和分析的开发人员具有重要的参考价值。
《Go 语言核心 36 讲》,新⼈⾸单¥59
全部留言(11)
- 最新
- 精选
- 张sir请问老师,我如何通过这些分析指标来定位具体哪个代码包或者哪个方法执行会有性能问题,比如pprof/goroutine采样结果,我输入topN或者web,输出0 0% 100% 36 64.29% github.com/go-redis/redis/internal/pool.(*ConnPool).reaper这些内容,应该怎么去分析呢
作者回复: 这里有一些参考:https://github.com/hyper0x/go_command_tutorial/blob/master/0.12.md
2019-12-0111 - nullptr老师好,我在生产环境遇到gc时panic的问题,不知道老师有没有好的建议来定位一下
作者回复: 这得看具体情况,输出了什么之类。看不到堆栈无从判断。
2020-07-312 - 安排go语言可执行程序加载到内存中,内存布局和 C语言的一样吗?go编出来的可执行程序也是elf格式吗?编译go程序的步骤是什么样的?预处理,编译汇编这些都有吗?可不可以只执行预处理或者只编译不链接?
作者回复: Go 属于现代高级编程语言,所以隐藏了很多编译的东西。这方面的东西你可以参看 Go 语言的源码,具体在 cmd/compile 等包下。
2019-09-102 - kuzan老师好,golang的gc会根据什么尺寸做回收呢,比如java里有xmx,那go呢?
作者回复: 可以查阅 runtime/debug.SetGCPercent 函数的文档。
2019-01-211 - nullptr没法回复老师的评论,我再评论一个新的。 代码工程比较大,而且主要代码没直接用到cgo,但是在gc时候panic了,信息也提示了cgo相关,不知道老师有没有啥工具可以定位。
作者回复: 估计是依赖包用到cgo了,这种情况用pprof和trace都不一定判断的出来,你只能细看stack,看看有没有线索。最好好好回想一下哪些依赖包有可能用到cgo。或者看看你的环境变量里有没有跟cgo有关的设定。
2020-07-31 - nullptr老师好,我在生产环境遇到了一个gc时panic,不知道如何定位,老师有没有啥好的思路。这个是部分报错信息: runtime: pointer 0xc011207d40 to unused region of span span.base()=0xc0009a2000 span.limit=0xc0009aa000 span.state=1 runtime: found in object at *(0xc005cd6420+0x28) object=0xc005cd6420 s.base()=0xc005cd6000 s.limit=0xc005cd7fa0 s.spanclass=24 s.elemsize=176 s.state=mSpanInUse *(object+0) = 0x1010000000068 *(object+8) = 0xc011206de0 *(object+16) = 0x1a71b0e *(object+24) = 0x0 *(object+32) = 0x0 *(object+40) = 0xc011207d40 <== *(object+48) = 0x20d8220 *(object+56) = 0xc011206ef0 *(object+64) = 0x1a71ae2 *(object+72) = 0x0 *(object+80) = 0x0 *(object+88) = 0x0 *(object+96) = 0x0 *(object+104) = 0x0 *(object+112) = 0x0 *(object+120) = 0x0 *(object+128) = 0x0 *(object+136) = 0x0 *(object+144) = 0x0 *(object+152) = 0x0 *(object+160) = 0x0 *(object+168) = 0x0 fatal error: found bad pointer in Go heap (incorrect use of unsafe or cgo?) runtime stack: runtime.throw(0x2037360, 0x3e) /usr/local/go/src/runtime/panic.go:1112 +0x72 fp=0x7f427953ba28 sp=0x7f427953b9f8 pc=0x4460f2 runtime.badPointer(0x7f426b52ade0, 0xc011207d40, 0xc005cd6420, 0x28) /usr/local/go/src/runtime/mbitmap.go:380 +0x230 fp=0x7f427953ba70 sp=0x7f427953ba28 pc=0x426530 runtime.findObject(0xc011207d40, 0xc005cd6420, 0x28, 0x7f42a9710a78, 0xc000050e98, 0x2) /usr/local/go/src/runtime/mbitmap.go:416 +0x9b fp=0x7f427953baa8 sp=0x7f427953ba70 pc=0x4265db runtime.scanobject(0xc005cd6420, 0xc000050e98) /usr/local/go/src/runtime/mgcmark.go:1274 +0x235 fp=0x7f427953bb38 sp=0x7f427953baa8 pc=0x431675 runtime.gcDrainN(0xc000050e98, 0x10000, 0xc002ee1800) /usr/local/go/src/runtime/mgcmark.go:1126 +0x12d fp=0x7f427953bb68 sp=0x7f427953bb38 pc=0x4311bd runtime.gcAssistAlloc1(0xc002ee1800, 0x10000) /usr/local/go/src/runtime/mgcmark.go:531 +0xf3 fp=0x7f427953bbb8 sp=0x7f427953bb68 pc=0x42fc43 runtime.gcAssistAlloc.func1() /usr/local/go/src/runtime/mgcmark.go:442 +0x33 fp=0x7f427953bbd8 sp=0x7f
作者回复: 关键在这一句:fatal error: found bad pointer in Go heap (incorrect use of unsafe or cgo?)
2020-07-31 - 党至少看完了,可能因为一直都用的go中简单的"技能"吧,对于后边的一些技能感触不是太深,但至少心里有个大概印象了,等到工作中用上了在来翻看这些内容。这些知识的确不同于一般的go教程,所涉及到的每个技术点都很有深度,对提升go技能很有帮助,但初学者不建议看。2019-07-319
- 虢國技醬二刷理解更加深刻😊2019-08-2413
- 嘎嘎runtime/trace可以跟踪代码执行期间的每一个事件,“The trace contains events related to goroutine scheduling: a goroutine starts executing on a processor, a goroutine blocks on a synchronization primitive, a goroutine creates or unblocks another goroutine; network-related events: a goroutine blocks on network IO, a goroutine is unblocked on network IO; syscalls-related events: a goroutine enters into syscall, a goroutine returns from syscall; garbage-collector-related events: GC start/stop, concurrent sweep start/stop; and user events. Here and below by "processor" I mean a logical processor, unit of GOMAXPROCS. Each event contains event id, a precise timestamp, OS thread id, processor id, goroutine id, stack trace and other relevant information” -- https://docs.google.com/document/u/1/d/1FP5apqzBgr7ahCCgFO-yoVhk4YZrNIDNf9RybngBc14/pub2019-04-083
- Geek_4b9101老师,这种网上都有,我们这里能不能来点新的,比如 性能分析案例2022-04-171