linux – Golang osexec,实时内存使用情况

linux – Golang osexec,实时内存使用情况,第1张

概述我正在使用 Linux,go和os / exec来运行一些命令. 我想知道一个进程’实时内存使用情况.这意味着我可以在启动进程后随时询问内存使用情况,而不仅仅是在运行之后. (这就是为什么Measuring memory usage of executable run using golang的答案不适合我的原因) 例如: cmd := exec.Command(...)cmd.Start() 我正在使用 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兆字节则会很好.

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

@H_301_13@解决方法 这是我在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 (Proportional Set Size),以KB表示.如果刚刚启动该过程,则应该有权访问相应的/ proc文件.

用内核3.0.13测试.

@H_301_13@ @H_301_13@ 总结

以上是内存溢出为你收集整理的linux – Golang os / exec,实时内存使用情况全部内容,希望文章能够帮你解决linux – Golang os / exec,实时内存使用情况所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1049321.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存