为什么golang堆配置文件中的“Total MB”小于顶部的“RES”?

前端之家收集整理的这篇文章主要介绍了为什么golang堆配置文件中的“Total MB”小于顶部的“RES”?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个写入的服务,在运行时需要6-7G内存(RES在顶部).所以我使用pprof工具试图找出问题所在.
go tool pprof --pdf http://<service>/debug/pprof/heap > heap_prof.pdf

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

我尝试用GOGC = off来配置我的服务,因此’Total MB’与顶部的’RES’完全相同.似乎内存是GCed但尚未返回内核将不会被分析.

任何的想法?

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

这是因为Go当前不会将GC-ed对象的内存返回给操作系统,确切地说,仅适用于小于预定义限制(32KB)的对象.而是缓存内存以加速未来的分配 Go:malloc.此外,似乎这将在未来 TODO中得到修复.

编辑:新GC行为:如果内存暂时不使用(大约5分钟),运行时将建议内核从未使用的虚拟范围中删除物理映射.可以通过调用runtime.FreeOSMemory()强制执行此过程

猜你在找的Go相关文章