检查每个进程和子进程的内存

时间:2014-08-25 23:01:59

标签: bash shell memory process subprocess

我试图创建一个脚本,显示mysqld的每个进程和子进程使用了​​多少。你可以在我的代码中看到我做了什么。

#!/bin/bash
#file contains the output of: pstree mysql -a -p |awk '{print $1;}' | sed 's/|-        {mysqld},//' >> psadd
filename='psadd'
#total= '0'
echo Start
while read p; do
    memU= cat /proc/$p/smaps |grep -e Private -e Shared |awk '{print $2}' |awk '{total = total + $1}END{print total}'
    echo "Process ID:"$p  "Memory Usage:"$memU
total="$((total+memu))"
echo "This is the current running total:" $total
done < $filename
echo "Total=" $total

如果您有任何想法,请不要错过。

1 个答案:

答案 0 :(得分:1)

计算进程内存使用量是...... complicated。我通常使用proc的RSS - Resident Set Size - 进程在内存中保存的内存量,不被其他进程共享。

以下查找MySQL守护程序的进程ID,并使用ps输出没有标头的RSS值。最后,它将此乘以4以获得KiB中的RSS大小。 (默认页面大小为4 KiB。)

ps有大量的信息 - 玩得开心!

ps -o rss= -p `pidof mysqld` | awk '{print $1*4, "KiB"}'

输出

7808 KiB