Golang分析内存溢出
跨界架构师
共 2905字,需浏览 6分钟
·
2022-04-12 06:02
这里是Z哥的个人公众号
每周五11:45 按时送达
当然了,也会时不时加个餐~
我的第「223」篇原创敬上
_ "net/http/pprof"
go func() {
http.ListenAndServe("0.0.0.0:8899", nil) //ip和端口可以更换
}()
阻塞分析。比如,goroutine 的 wait。
内存分析。比如,内存泄漏、内存消耗异常等情况。
互斥锁分析。比如,观察代码里用到的 sync.RWMutex 和 sync.Mutex 的具体情况。
CPU 分析。比如,排查哪些代码较多地占用了 CPU 资源。
通过url。go tool pprof http://localhost:8899/debug/pprof/profile
通过文件。go tool pprof cpuprofile 文件路径
func main() {
go func() {
http.ListenAndServe("0.0.0.0:8899", nil)
}()
str := "sadasdasffrgrgrgrgrgrfefafasfsadasdasffrgrgrgrgrgrfefafasfsadasdasffrgrgrgrgrgrfefafasfsadasdasffrgrgrgrgrgrfefafasfsadasdasffrgrgrgrgrgrfefafasfsadasdasffrgrgrgrgrgrfefafasf"
for i := 0; i < 999; i++ {
str += str
}
fmt.Scanln()
}
go tool pprof http://localhost:8899/debug/pprof/heap
flat:当前函数所占用的容量。
flat%:当前函数所占用的容量,在总分配容量的百分比。
sum%:是从调用的最外层到当前方法累加使用的容量占总容量的百分比
cum:当前函数以及子函数所占用的容量。
cum%:当前函数以及子函数所占用的容量,在总分配容量的百分比。
最后一列是函数的名字
list main.main
ulimit -c 1024 或者 ulimit -c unlimited 来设置 dump 文件的最大 size。
echo "ulimit -c unlimited" >> ~/.profile
export
export GOBACTRACE=crash
echo "export GOTRACEBACK=crash " >> ~/.profile
通过 pprof 实时分析。
程序 crash 时自动保存 dump,再通过 delve 或者 gdb 分析。
推荐阅读:
原创不易,如果你觉得这篇文章还不错,就「点赞」或者「在看」一下吧,鼓励我的创作 :)
也可以分享我的公众号名片给有需要的朋友们。
如果你有关于软件架构、分布式系统、产品、运营的困惑
可以试试点击「阅读原文」
评论