golang调试

一、pprof

在计算机性能调试领域里,profiling 是指对应用程序的画像,画像就是应用程序使用 CPU 和内存的情况。 Go语言是一个对性能特别看重的语言,因此语言中自带了 profiling 的库。

  • runtime/pprof:采集程序(非server)的运行数据进行分析
  • net/http/pprof:采集HTTP Server的运行时数据进行分析

pprof开启后,每隔一段时间(10ms)就会收集下当前的堆栈信息,获取各函数占用的CPU以及内存资源。最后通过对这些数据进行分析,形成一个性能分析报告。

ps:我们只应该在性能测试的时候才在代码中引入pprof。

pprof以profile.proto读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)。

profile.proto 是一个 Protocol Buffer v3 的描述文件,它描述了一组 callstack 和 symbolization 信息, 作用是表示统计分析的一组采样的调用栈,是很常见的 stacktrace 配置文件格式。

模式

  • Report generation:报告生成
  • Interactive terminal use:交互式终端使用
  • Web interface:Web 界面

内容

  • CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置
  • Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏
  • Block Profiling:阻塞分析,记录 goroutine 阻塞等待同步(包括定时器通道)的位置
  • Mutex Profiling:互斥锁分析,报告互斥锁的竞争情况

使用

import ( _ "net/http/pprof")

1)  web界面访问:http://127.0.0.1:6060/debug/pprof/

2)交互式终端   go tool pprof http://localhost:6060/debug/pprof/profile?seconds=60    // cpu

go tool pprof http://localhost:6060/debug/pprof/heap   // mem

3) 使用go tool pprof可视化工具

需要先编写测试用力,生成cpu.prof  mem.prof:    go test -bench=. -cpuprofile=cpu.prof

go tool pprof -http=:8080 cpu.prof

二、go tool trace

 

 

参考:

1. pprof性能调优 topgoer.com

2. 像大神一样调试 Go (译文) | Go主题月  https://betterprogramming.pub/debug-go-like-a-pro-213d4d74e940

3. Go 大杀器之性能剖析 PProf 煎鱼

4. Go 大杀器之跟踪剖析 trace 煎鱼

posted @ 2019-03-15 23:51  yuxi_o  阅读(340)  评论(0编辑  收藏  举报