pprof的inuse_space和linux top查看的RES差别很大

njuyang14 · 2020-03-19 20:21:35 · 1794 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2020-03-19 20:21:35 的主题,其中的信息可能已经有所发展或是发生改变。

求助下各位大佬,虽然inuse_space记录的是heap上的内存,但是我有个进程RES有100M,pprof查看到的inuse_space加起来才几M,是我理解错了这俩概念吗?
pprof是在服务内部开了端口监听,然后使用本地的go tool查看的:
go tool pprof -http=:xxxx http://x.x.x.x:xxxx/debug/pprof/heap

还有就是go程序栈内存有没有啥工具能看?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1794 次点击  
加入收藏 微博
1 回复  |  直到 2020-03-21 13:29:15
stirlingx
stirlingx · #1 · 5年之前

送你一段代码,RES是这么算的 RES=HeapInuse + HeapIdle - HeapReleased

package main

import (
    "fmt"
    "runtime"
    "time"
)

func main() {
    fmt.Printf("%v\t%v\t%v\t%v\n", "HeapInuse", "HeapIdle", "HeapReleased", "RES")
    for i := 0; i < 200; i++ {
        _ = make([]int, i*1000000)
        m := runtime.MemStats{}
        runtime.ReadMemStats(&m)
        fmt.Printf("%v\t%v\t%v\t%v\n", m.HeapInuse, m.HeapIdle, m.HeapReleased,   m.HeapInuse + m.HeapIdle - m.HeapReleased)
        time.Sleep(time.Second)
    }
}
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传