go语言学习6 | 青训营笔记

76 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的的第6天

go语言性能分析工具pprof

1.简介

性能调优原则:要依靠数据不是猜测,要定位最大瓶颈而不是细枝末节,不要过早优化,也不要过度优化。

2.性能分析工具pprof

pprof是用于可视化和分析性能分析数据的工具。

实战:1.搭建pprof实践项目。

2.浏览器查看指标。

3.CPU里查看:

命令:list:根据指定的正则表达式查找代码行。

web:调用关系可视化。

采样过程:

采样对象:函数调用和它们占用的时间。

采样率:100次/秒,固定值。

采样时间:从手动启动到手动结束。

操作系统:每10ms向进程发送一次SIGPROF信号。

进程:每次接收到SIGPROF会记录调用堆栈。

写缓冲:每100ms读取已经记录的调用栈并写入输出流。

4.Heap-堆内存:Top视图,Source视图。

采样过程:

采样程序通过内存分配器在堆上分配和释放的内存,记录分配/释放的大小和数量。

采样率:每分配512KB记录一次,可在运行开头修改,1为每次分配均记录。

采样时间:从程序运行开始到采样时。

采样指标: alloc_space, alloc_objects, inuse_space, inuse_objects

计算方式: inuse = alloc - free

5.goroutine-协程:goroutine泄露也会导致内存泄露。

由上到下表示调用顺序,每一块代表一个函数,越长代表占用CPU的时间更长火焰图是动态的,支持点击块进行分析。

6.mutex-锁

锁竞争:采样争抢锁的次数和耗时。

采样率:只记录固定比例的锁操作,1为每次加锁均记录。

7.block-阻塞

阻塞操作:采样阻塞操作的次数和耗时

采样率:阻塞耗时超过阈值的才会被记录,1为每次阻塞均记录。