我目前正在尝试调试our Go code中令人讨厌的内存泄漏。
我所知道的:
pprof
带-base
标志)runtime.NumGoroutine()
)object = nil
,内存将被垃圾收集(好!但现在我与其他使用此对象的go-routines进行数据竞争)我不知道的事情:
感谢您的时间和任何建议!
答案 0 :(得分:1)
我可以建议两种工具。
使用Go Guru,查看谁指向或引用了一个指针。它与我使用的vim-go插件集成在一起,我在该here上发表了一篇文章。
Valgrind是用于C / C ++的工具,但找到了一篇有关将其与Go一起使用的文章。
答案 1 :(得分:0)
找不到您的代码404。
当您放置object = nil时。并没有立即清除它,但是当某些goroutine仍然保留它时,即使gc运行,该对象也将保持静止。
您问谁持有引用,使用该val而不将其设置为nil的goroutine或goroutine在循环中使用它的都将保留引用。
gc()永远不会将引用的参考标记为黑色,因此永远不会清除