为什么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的接口? 接口可以说是一种类型,可以粗略的理解为他...
1、Golang指针 在介绍Golang指针隐式间接引用前,先简单说下...
1、概述 1.1&#160;Protocol buffers定义 Protocol buffe...
判断文件是否存在,需要用到"os"包中的两个函数: os.Stat(...
1、编译环境 OS :Loongnix-Server Linux release 8.3 CPU指...
1、概述 Golang是一种强类型语言,虽然在代码中经常看到i:=1...