【问题标题】:go tool pprof -inuse_space much smaller than linux top showsgo tool pprof -inuse_space 比 linux top 显示小很多
【发布时间】:2019-05-30 19:58:45
【问题描述】:

我的程序在后台运行。我使用 linux top 命令,它显示16g 内存。但是当我想使用 go pprof -inuse_space 来检查点时,我只给出了200M。其他的记忆去哪儿了?

【问题讨论】:

  • “内存使用”在现代系统中是一个真正复杂的问题。简而言之:一切都很好,这里没有什么可担心的。这是两个不同的数字,它们不相关,但一切都很好。
  • 顶部的哪一列?正如 Volker 指出的那样,内存使用很复杂,顶部向您显示的 每个进程的三列内存使用 就证明了这一点。我猜你看了VIRT(这对于几乎所有进程来说都是巨大的)并且惊慌失措。看RES,更准确地描述了进程内存使用情况。
  • 新数据是VIRT 42g RES 0.024t。当我使用go tool pprof -inuse_space localhost:2000/debug/pprof/heap时,它显示它只使用了156.75MB内存。我只是不知道记忆在哪里。

标签: go heap-memory profile pprof


【解决方案1】:

一般情况下,os中使用的内存(顶部VIRT所示)比pprof大。一个原因是当堆大小 > ($GOGC% + 1) * (可达节点大小): https://blog.golang.org/go15gc 时会发生 gc。默认情况下,$GOGC 是 100,这意味着内存大小将是 pprof 显示的堆大小的两倍。但你似乎不是这种情况。

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 2015-09-25
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    相关资源
    最近更新 更多