/images/avatar.jpg

几多人位于山之巅俯瞰我的疲倦

pprof学习笔记

什么是pprof pprof是用于可视化和分析性能分析数据的工具,pprof以pprof.proto读取分析样本的集合,并生成报告以可书画并帮助分析数据。 而pprof.proto是一个 protobuf的描述文件,它描述了一组callstack和symbolization信息,作用是统计分析的一组采样的调用栈。 一般来说,性能分析主要关注CPU,内存,磁盘IO,网络这些指标。 pprof有一下4种类型: CPU profiling(cpu性能分析):用于分析函数或方法的执行耗时; Memory profiling:用于分析程序的内存占用情况; Block profiling:用于记录goroutine在等待共享资源花费的时间; Mutex profiling:用于记录因为锁竞争导致的等待或延迟。 pprof的采样方式 runtime/pprof:采集程序(非 Server)的指定区块的运行数据进行分析。 net/http/pprof:基于HTTP Server运行,并且可以采集运行时数据进行分析。 go test:通过运行测试用例,并指定所需标识来进行采集。 pprof的使用 demo代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package main import ( "log" "net/http" _ "net/http/pprof" ) func main() { go func() { for { log.

Context源码分析

Context是 Go 语言中非常有特色的一个特性, 其主要的作用是在 goroutine 中进行上下文的传递,而在传递信息中又包含了 goroutine 的运行控制、上下文信息传递等功能。