原文中文,约5200字,阅读约需13分钟。
📝
内容提要
Go heap profile是一种用于检查内存泄漏和内存占用问题的工具。文章介绍了heap profile的工作原理和一个案例,发现其不能正确反应当前分配的内存。经过分析发现,这是因为heap profile是采样统计的,而不是实时统计的。文章还介绍了如何找回被错误统计的内存。
❓
Q&A
Go heap profile 是什么?
Go heap profile 是一种用于检查内存泄漏和内存占用问题的工具。
为什么 heap profile 显示的内存分配不准确?
因为 heap profile 是采样统计而非实时统计,可能会延迟显示内存分配情况。
如何获取准确的内存分配数据?
可以通过强制调用 runtime.GC() 来立即更新 heap profile 数据,或者在访问时加上 gc=1 的参数。
MemProfileRate 的作用是什么?
MemProfileRate 控制内存分析中记录的内存分配比例,默认值为 512 * 1024。
如何使用 Go heap profile 检查内存泄漏?
可以创建两个间隔较长的 heap profile,获取它们的差值来查看内存泄漏。
使用 heap profile 时需要注意什么?
需要注意 heap profile 的数据可能延迟,且修改 MemProfileRate 可能影响性能,非必要时不建议更改。
🏷️