在main.go 中加入 import _ "net/http/pprof"
在浏览器访问 http://xx.xx.xx.xx/debug/pprof
点击heap
# runtime.MemStats
# Alloc = 3537545936
# TotalAlloc = 217546115776
# Sys = 4223095608
# Lookups = 1321203
# Mallocs = 1558757559
# Frees = 1533787828
# HeapAlloc = 3537545936 分配给堆的内存使用量
# HeapSys = 3784015872 堆占用系统的内存使用量
# HeapIdle = 167993344 堆中空闲但没有释放还给系统的内存使用量
# HeapInuse = 3616022528 堆中正在使用的内存使用量
# HeapReleased = 0
# HeapObjects = 24969731
# Stack = 221347840 / 221347840
# MSpan = 50597304 / 51511296
# MCache = 9600 / 16384
# BuckHashSys = 3240312
# GCSys = 148043776
# OtherSys = 14920128
# NextGC = 3824913056 下一次内存使用量达到多少值时触发GC
执行 go tool pprof -raw -seconds 30 http://xx.xx.xx.xx/debug/pprof/heap
(pprof) top
1517.34MB of 1870.97MB total (81.10%)
Dropped 760 nodes (cum <= 9.35MB)
Showing top 10 nodes out of 83 (cum >= 43.01MB)
flat flat% sum% cum cum%
332.58MB 17.78% 17.78% 332.58MB 17.78% runtime.rawstringtmp
312.09MB 16.68% 34.46% 339.85MB 18.16% runtime.mapassign
274.15MB 14.65% 49.11% 274.15MB 14.65% runtime.makemap
165.06MB 8.82% 57.93% 165.06MB 8.82% gopkg.in/mgo%2ev2.copySession
121.17MB 6.48% 64.41% 121.17MB 6.48% github.com/gorilla/websocket.newConn
96.51MB 5.16% 69.57% 97.51MB 5.21% context.WithCancel
82.52MB 4.41% 73.98% 703.77MB 37.62% net/http.readRequest
45.51MB 2.43% 76.41% 454.68MB 24.30% net/textproto.(*Reader).ReadMIMEHeader
44.74MB 2.39% 78.80% 55.25MB 2.95% _/home/user/Documents/udesk_vistor_go/app/controllers.SocketConnection
43.01MB 2.30% 81.10% 43.01MB 2.30% net/url.parse
可以使用 list lib_name 来定位到具体代码的位置。
- flat 表示函数自身执行所用内存
- cum 表示执行函数自身和其调用的函数所用的内存和