如何获取居民集大小(RSS)

时间:2019-12-01 22:20:38

标签: linux go memory

我需要了解Linux中Go进程的物理内存消耗。 我需要的是居民集大小(RSS)

runtime.ReadMemStats不适合,因为无法获取驻留的虚拟内存部分的大小。

syscall.Getrusage不适合,因为它仅返回Maxrss,这是整个流程生命周期中最大的RSS。

如何在Go中查询RSS?

1 个答案:

答案 0 :(得分:-1)

您可以解析/ 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
}