大佬教程收集整理的这篇文章主要介绍了记一次golang内存泄露问题修复,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
实现思路大致如下:
@H_675_4@程序运行一段时间后发现系统变的巨卡,查看进程管理发现此进程占用大部分内存,再次估计是发生内存泄露,开始查找问题.
在程序中加入内存消耗分析
fm,err := os.OpenFile("./mem.out",os.O_RDWR|os.O_CREATE,0644) if err != nil { log.Fatal(err) } pprof.WriteHeapProfile(fm) fm.Close()
分析后发现大部分内存分配在watcher.WaitForFileChange()内部,然后继续使用Net/http/pprof
_ net/http/pprof go func() { http.ListenAndServe("localhost:6060",nil) }()
使用网页查看,发现有大量的goroutIne阻塞于watcher.WaitForFileChange().至此发现是因为文件监视当文件发生改变后没有返回,导致大量goroutIne阻塞于这里.
后测试发现文件监视这个包一定情况下存在这个问题,后改用文件锁替代,运行一段时间后没有出现泄漏,至此问题解决.
以上是大佬教程为你收集整理的记一次golang内存泄露问题修复全部内容,希望文章能够帮你解决记一次golang内存泄露问题修复所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。