目录
简介:本文内容 · Go 语言的心智模型 · 性能分析与追踪
使用场景: 降低成本 · 降低延迟 · 内存泄露 · 程序挂起(Hanging)· 中断
Go 性能分析:CPU · 内存 · Block · Mutex · Goroutine · ThreadCreate
性能分析可视化: 命令行 · 火焰图 · 浏览器图
Go 执行追踪: 时间线可视化 · 派生分析
其他工具:time · perf · bpftrace
高级话题: 汇编 · 栈追踪
Datadog 产品: 持续性能分析器 · APM(分布式追踪)
???? 本文还在不断撰写过程中。上面列出的部分会陆续有对应的可点击的地址。关注我的 twitter 获取更多进展。
简介 本文内容 本文是实践指南,目标读者是那些想要通过使用性能分析和追踪技术来提升程序的忙碌 gopher。如果你还不熟悉 Go 的内部原理,建议你先阅读整个简介。之后你就可以自由阅读感兴趣的章节。
Go 的心智模型 在不理解 Go 语言底层运行机制的情况下,成为一个熟练编写 Go 代码的开发者是可能的。但当面对性能分析和调试时,理解内部的心智模型将大有裨益。因此下面我们将展示 Go 的基础模型。这个模型应该足够让你避免绝大多数常见的错误,但是 所有的模型都是错误的,因此鼓励你探索更深层的资料,以便在将来解决更难的问题。
Go 的首要工作是复用和抽象硬件资源,与操作系统相似。通常使用两个主要的抽象来实现:
Goroutine 调度器:管理代码如何在系统的 CPU 上执行。 垃圾回收器:提供虚拟内存,在需要时自动释放。Goroutine 调度器 我们先使用下面的例子来讨论调度器:
func main() { res, err := http.Get("https://example.org/") if err != nil { panic(err