gpt4 book ai didi

go - 为什么 golang 堆配置文件中的 'Total MB' 小于顶部的 'RES'?

转载 作者:IT王子 更新时间:2023-10-29 01:19:40 28 4
gpt4 key购买 nike

我有一个用 go 编写的服务,它在运行时占用 6-7G 内存(RES 在顶部)。所以我使用 pprof 工具试图找出问题所在。

go tool pprof --pdf http://<service>/debug/pprof/heap > heap_prof.pdf

但结果只有大约 1-2G 内存(pdf 中的“总 MB”)。其余的在哪里?

我已经尝试使用 GOGC=off 来分析我的服务,结果“总 MB”与顶部的“RES”完全相同。似乎内存已被 GCed 但尚未返回给内核将不会被分析。

有什么想法吗?

P.S,我已经在 1.0.3 和 1.1rc3 中进行了测试。

最佳答案

这是因为 Go 目前不会将 GC 对象的内存返回给操作系统,准确地说,只返回小于预定义限制 (32KB) 的对象。相反,内存被缓存以加速 future 的分配 Go:malloc .此外,这似乎将在未来得到解决 TODO .

编辑:新的 GC 行为:如果内存有一段时间没有使用(大约 5 分钟),运行时将建议内核从未使用的虚拟范围中删除物理映射。可以通过调用 runtime.FreeOSMemory()

强制执行此过程

关于go - 为什么 golang 堆配置文件中的 'Total MB' 小于顶部的 'RES'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16516189/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com