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兆字节,那就太好了。

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

回答:

这是我在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测试。

以上是 Golang OS / EXEC,实时内存使用情况 的全部内容, 来源链接: utcz.com/qa/407530.html

回到顶部