背景
最近合作开发一个项目,项目部署发现了才跑了没多久,就直接宕机了,查看服务器信息发现在某个时间端内存猛的暴涨了非常多,由于是合作开发的项目,我仔细的检查了自己的拿块代码,都没啥问题,另一个开发也说自己的代码没啥问题。
pprof
pprof 是什么
pprofgo
pprof 的采样方式
- runtime/pprof
- net/http/pprof
- test
这里举例采样内存信息。
heapProfilego tool pprof heapProfile top
webCould not execute dot; may need to install graphviz.
runtime.MemStats
net/http/pprof
net/http/pprof
http://127.0.0.1:6060/debug/pprof
- allocs:查看过去所有内存分配的样本。
- block:查看导致阻塞同步的堆栈跟踪。
- cmdline: 当前程序的命令行的完整调用路径。
- goroutine:查看当前所有运行的 goroutines 堆栈跟踪。
- heap:查看活动对象的内存分配情况。
- mutex:查看导致互斥锁的竞争持有者的堆栈跟踪。
- profile: 默认进行 30s 的 CPU Profiling,得到一个分析用的 profile 文件。
- threadcreate:查看创建新 OS 线程的堆栈跟踪。
- trace:略,trace可以单独写一篇文章来介绍。
blockmutex
gin 框架使用 pprof
gingohttppprofgithub.com/gin-contrib/pprofnet/http/pprof
test
testgo tool pprof
火焰图
安装
启动
http://localhost:8080
每个块都是可点击的,可以进行深度分析。
总结
pprofgocpugoroutine
pprof
参考
golang pprof 实战-CPU,heap,alloc,goroutine,mutex,block
Go 语言编程之旅-pprof篇
实用go pprof使用指南