通过
net/http/pprof
工具来进行分析内存
pprof简介
pprof
是用于可视化和分析性能分析数据的工具; 以profile.proto
读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)。
支持模式
- Report generation:报告生成
- Interactive terminal use:交互式终端使用
- Web interface:Web 界面
用途
- CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置
- Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏
- Block Profiling:阻塞分析,记录 goroutine 阻塞等待同步(包括定时器通道)的位置
Mutex Profiling:互斥锁分析,报告互斥锁的竞争情况;
使用示例
引入pprof
net/http/pprof
对 runtime/pprof
进行了封装,并在http端口上暴露出来,入口为 IP:PORT/debug/pprof/
;
若应用为web服务器,只需引入包即可_ "net/http/pprof"
,会自动注册路由到/debug/pprof/
;
若为服务时程,可开启一个goroutine开启端口并监听;
package main
import (
"github.com/astaxie/beego"
_ "github.com/beeWeb/routers"
"net/http"
_ "net/http/pprof"
)
func main() {
go func() {
http.ListenAndServe("0.0.0.0:8090", nil)
}()
beego.Run()
}
数据分析
访问 http://127.0.0.1:8090/debug/pprof/
即可实时查看性能数据;
常用的采集分析命令:
go tool pprof http://localhost:8080/debug/pprof/profile?seconds=30 默认采集需要30秒
go tool pprof http://localhost:8080/debug/pprof/heap
-inuse_space:分析应用程序的常驻内存占用情况
-alloc_objects:分析应用程序的内存临时分配情况
go tool pprof http://localhost:8080/debug/pprof/block
go tool pprof http://localhost:8080/debug/pprof/mutex
命令执行后,在本地会保留一份分析报告,如pprof.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz
,可以通过go tool pprof
来进行分析;
通过web可视化的方式可以分析数据:
go tool pprof -http=:8000 http://localhost:8080/debug/pprof/heap 查看内存使用
go tool pprof -http=:8000 http://localhost:8080/debug/pprof/profile 查看cpu占用
go tool pprof -http=:8000 pprof.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz 对本地生成文件的解析查看
注意,需要提前安装
Graphviz
用于画图:
下载地址:https://graphviz.gitlab.io/download/
windows:https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.zip
解压后,添加环境变量 Path下添加 %graphviz%\bin;
测试:命令提示符下 dot -V # 打印版本信息
若是Linux,yum install graphviz
# 默认安装版本为为2.30 依赖项较多;
访问 http://localhost:8000/ui
, 即可看到详细的分析报告及各种图示;
eg:
GC
windows
在cmd命令行下:
1.设置跟踪GC的临时环境变量
set GOGCTRACE=1
set GODEBUG=gctrace=1
2.将gc写入日志中
xxx.exe 2> gc.log
Linux
GODEBUG=gctrace=1 ./xxx
GODEBUG=gctrace=1 ./xxx 2> gc.log
参数说明
…