加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么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()强制执行此过程

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读