Golang os/exec,实时内存使用

我正在使用 Linux、go 和 os/exec 来运行一些命令。我想知道一个进程的实时内存使用情况。这意味着我可以在启动进程后随时询问内存使用情况,而不仅仅是在运行后。


(这就是为什么在回答测量使用golang可执行文件运行的内存使用量是不是一种选择对我来说)


例如:


cmd := exec.Command(...)

cmd.Start()

//...

if cmd.Memory()>50 { 

    fmt.Println("Oh my god, this process is hungry for memory!")

}

我不需要非常精确的值,但如果它的错误范围低于 10 兆字节,那就太好了。


有没有办法做到这一点,或者我需要某种命令行技巧?


www说
浏览 201回答 1
1回答

慕盖茨4494581

这是我在 Linux 上使用的:func calculateMemory(pid int) (uint64, error) {    f, err := os.Open(fmt.Sprintf("/proc/%d/smaps", pid))    if err != nil {        return 0, err    }    defer f.Close()    res := uint64(0)    pfx := []byte("Pss:")    r := bufio.NewScanner(f)    for r.Scan() {        line := r.Bytes()        if bytes.HasPrefix(line, pfx) {            var size uint64            _, err := fmt.Sscanf(string(line[4:]), "%d", &size)            if err != nil {                return 0, err            }            res += size        }    }    if err := r.Err(); err != nil {        return 0, err    }    return res, nil}此函数返回给定 PID的PSS(比例集大小),以 KB 表示。如果您刚刚启动该进程,您应该有权访问相应的 /proc 文件。使用内核 3.0.13 测试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go