gpt4 book ai didi

linux - Golang os/exec,实时内存使用

转载 作者:IT王子 更新时间:2023-10-29 00:51:07 30 4
gpt4 key购买 nike

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

(这就是为什么 Measuring memory usage of executable run using 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
}

此函数返回 PSS (Proportional Set Size)对于给定的 PID,以 KB 表示。如果你刚刚启动进程,你应该有权限访问相应的/proc文件。

使用内核 3.0.13 测试。

关于linux - Golang os/exec,实时内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31879817/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com