Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 检查每个进程和子进程的内存_Bash_Shell_Memory_Process_Subprocess - Fatal编程技术网

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

Bash 检查每个进程和子进程的内存,bash,shell,memory,process,subprocess,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 /p

我试图创建一个脚本来显示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
#/bin/bash
#文件包含:pstree mysql-a-p | awk'{print$1;}'| sed's/|-{mysqld},//'>>psadd的输出
filename='psadd'
#总计='0'
回声启动
读p;做
memU=cat/proc/$p/smaps | grep-e Private-e Shared | awk'{print$2}'| awk'{total=total+$1}END{print total}'
echo“进程ID:$p”内存使用率:$memU
总计=“$((总计+内存))”
echo“这是当前运行的总计:$total
完成<$filename
echo“Total=$Total

如果您有任何想法,我们将不胜感激

计算进程内存使用率是。我通常使用一个进程的RSS——常驻集大小——进程在内存中的内存量,其他进程不共享

下面查找MySQL守护进程的进程ID,并使用
ps
输出无头RSS值。最后,将其乘以4,得到以KiB表示的RSS大小。(默认页面大小为4kib。)

有大量的信息——玩得开心

壳 输出
谢谢你,这确实为我澄清了一些事情。如果你不介意的话,我很难把它写进我的剧本<代码>代码#/bin/bash#文件包含以下输出:pstree mysql-a-p | awk'{print$1;}'| sed/|-{mysqld},//'>>psadd filename='psadd'#total='0'echo Start,同时读取p;do memU=
ps-o rss=-p$p | awk'{print$1*4,“KiB”}
echo“进程ID:$p”内存使用率:$memU#total=“$((total+memU))”“#echo”这是当前运行的总数:$total done<$filename#echo“total=$total
code
再次感谢您的帮助。编辑我的评论的时间用完了!您可以在上面的pastbin中看到我的代码,它的格式更好。ps抛出一个错误,但我认为我正确地传递了变量。再次感谢,好先生。或者至少我该如何向您发出的命令传递PID列表。我尝试使用变量$p,但没有成功。我试着传递list/tmp/psadd,它在每一行上都有一个新的pid,但没有运气。pstree不列出mysqld和子进程,它列出子线程。“一个进程的子线程位于父进程下,并以花括号显示进程名称”这令人困惑:)在
KiB
而不是
页面中,
ps
是否已经给出
rss
?在I can find
resident set size中,任务使用的非交换物理内存(以KB为单位)。(别名rssize,rsz)
。此外,键
resident
将给出
resident页面
,而不是键
rss
给出的
resident集大小
。我猜这意味着上面的命令将给出占用内存的4倍。相关:
ps -o rss= -p `pidof mysqld` | awk '{print $1*4, "KiB"}'
7808 KiB