Pprof看到的 heap inuse_space size和top统计的VmRss差异很大,为什么呢?

youzhengchuan · · 2594 次点击
刚看了一篇文章[Go内存泄漏?不是那么简单!](https://colobu.com/2019/08/28/go-memory-leak-i-dont-think-so/)里面提到: ``` 可以看到,当对象释放的时候,释放出来的内存并没有立即返还给操作系统,而在我们进行了一次强制垃圾回收后才返还。 Go语言把返还的过程叫做scavenging (拾荒)。这个拾荒的算法一直在演化,可以查看issue #16930,相关的优化提案可以参考:issue #30333。 原先的scavenging是每隔几分钟(5分钟)执行一次拾荒操作,保证程序使用的内存和RSS基本一致。后来在1.11、1.12的演化过程中,改成了"智能"的拾荒操作。目标是尽量避免全部返还给操作系统导致的很重的重获取的花销,但是这也带来了一个问题,那就是当前的拾荒设计对于偶尔一个尖峰,并不会将不用的大量内存返还给操作系统,也就是本文一开始我在项目中遇到的问题。 ``` 但是还不是很确定本程序是不是这个原因导致的,现在在想办法增加统计下heap的各个状态数据,之后才能确认。
#1
更多评论
还有一个思路:内存分配的对象小且分配销毁频繁页内存碎片化严重
#2