我目前正在尝试调试 our Go code 中的严重内存泄漏。 .
我知道的:
- 内存的去向(
pprof
带有-base
标志) - 为什么要分配新内存(我们代码中的“重新连接”功能)
- goroutine 的数量没有增加(
runtime.NumGoroutine()
) - 如果我执行
object = nil
,内存将被垃圾回收(很好!但现在我与使用此对象的其他 go-routines 发生数据竞争)
我不知道的:
- 为什么没有对新内存进行垃圾回收。为此,我需要知道谁拥有一个对象的引用。
感谢您的宝贵时间和任何建议!
最佳答案
我可以推荐两个工具。
使用 Go Guru , 查看谁指向或引用了一个指针。它与 vim-go 集成在一起。我使用的插件,我在那个 here 上做了一个帖子.
Valgrind是一个 C/C++ 的工具,但是找到了一篇关于在 Go 中使用它的文章。
关于debugging - 有没有办法知道谁拥有对 Go 中对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48499573/