为什么golang堆配置文件中的“Total MB”小于顶部的“RES”?
发布时间:2020-12-16 19:03:12 所属栏目:大数据 来源:网络整理
导读:我有一个写入的服务,在运行时需要6-7G内存(RES在顶部).所以我使用pprof工具试图找出问题所在. go tool pprof --pdf http://service/debug/pprof/heap heap_prof.pdf 但结果中只有大约1-2G的内存(pdf中的’总MB’).其余的在哪里? 我尝试用GOGC = off来配置我
我有一个写入的服务,在运行时需要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()强制执行此过程 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |