Linux 检查生成其他进程的bash脚本中的总内存使用情况

Linux 检查生成其他进程的bash脚本中的总内存使用情况,linux,bash,memory-management,Linux,Bash,Memory Management,如果我有一个调用其他程序的脚本,如何定期检查该脚本的内存使用情况?我不能只使用脚本的pid在pmap或ps上使用循环,因为脚本会产生其他进程,这些进程将有自己的pid和内存使用 有人知道一种获取脚本总内存使用量的好方法吗?它将考虑脚本将产生的所有子进程 谢谢 如果子进程没有自己的子进程,那么很容易: $ ps h --ppid "$PID" -o vsz | awk '{ SUM+=$0 }; END { print SUM }' 否则,您可能需要依赖进程组ID PGID,但有必要确保从脚本调

如果我有一个调用其他程序的脚本,如何定期检查该脚本的内存使用情况?我不能只使用脚本的pid在pmap或ps上使用循环,因为脚本会产生其他进程,这些进程将有自己的pid和内存使用

有人知道一种获取脚本总内存使用量的好方法吗?它将考虑脚本将产生的所有子进程


谢谢

如果子进程没有自己的子进程,那么很容易:

$ ps h --ppid "$PID" -o vsz | awk '{ SUM+=$0 }; END { print SUM }'
否则,您可能需要依赖进程组ID PGID,但有必要确保从脚本调用的程序不会设置它们自己的进程组

$ ps h -e -o pgid,vsz | awk -v "PGID=$PID" '$1==PGID { SUM+=$2 }; END { print SUM }'
如果脚本的所有子级不属于同一个PGID,我们只能递归地循环进程:

$ cat ~/bin/vsztree

#!/bin/bash

declare -i VSZ_TOTAL

vsz() {
    while read PID VSZ; do
        VSZ_TOTAL+=$VSZ
        vsz "$PID"
    done < <(ps --ppid "$1" --format pid,vsz --no-headers)
}

vsz "$1"
echo $VSZ_TOTAL

$ vsztree "$PID"

这里$PID是脚本的PID。输出是以千字节为单位的总虚拟内存大小。

检查/proc/..@twalberg下的各种与内存相关的文件,看看它有何帮助?例如,/proc//status和/proc//statm都包含有关特定进程内存使用情况的详细统计信息。如果您查看这些文件中您感兴趣的所有流程的值,并将它们相加,或求平均值,您应该能够找出您要查找的内容。。。这就是ps查找其信息的方式,但它没有太多的能力根据各种条件聚合数据……在您编写的脚本中,您添加的值不是错误的吗?看起来您正在添加pid编号,我们希望从ps输出中添加RSS值,对吗?不,脚本绝对不会汇总pid。如果您想要rss而不是vsz,只需将一个替换为另一个即可。