我需要知道Linux中Go进程的物理内存消耗。我需要的是驻地设置大小(RSS)。
runtime.ReadMemStats不合适,因为无法获得驻留的虚拟内存的一部分大小。
syscall.Getrusage不适合,因为它只返回进程生命周期中最大RSS的Maxrss。
如何在Go中查询RSS?
发布于 2019-12-01 22:20:38
您可以解析/proc/self/statm文件。它只包含整数,所以很容易解析。第二个字段是以页面为单位的RSS。
func getRss() (int64, error) {
buf, err := ioutil.ReadFile("/proc/self/statm")
if err != nil {
return 0, err
}
fields := strings.Split(string(buf), " ")
if len(fields) < 2 {
return 0, errors.New("Cannot parse statm")
}
rss, err := strconv.ParseInt(fields[1], 10, 64)
if err != nil {
return 0, err
}
return rss * int64(os.Getpagesize()), err
}https://stackoverflow.com/questions/59130519
复制相似问题