linux – Golang os / exec,实时内存使用情况
发布时间:2020-05-27 14:00:04 所属栏目:Linux 来源:互联网
导读:我正在使用 Linux,go和os / exec来运行一些命令. 我想知道一个进程’实时内存使用情况.这意味着我可以在启动进程后随时询问内存使用情况,而不仅仅是在运行之后. (这就是为什么Measuring memory usage of executable run using golang的答案不适合我的原因) 例
|
我正在使用
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
}
此函数返回给定PID的PSS (Proportional Set Size),以KB表示.如果刚刚启动该过程,则应该有权访问相应的/ proc文件. 用内核3.0.13测试. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
