【问题标题】:Check memory per processes and subprocesses检查每个进程和子进程的内存
【发布时间】:2014-10-19 04:14:25
【问题描述】:

我试图创建一个脚本来显示 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

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

【问题讨论】:

标签: bash shell memory process subprocess


【解决方案1】:

计算一个进程的内存使用是...complicated。我通常使用 proc 的 RSS——驻留集大小——进程在内存中持有的内存量,不被其他 proc 共享。

下面找到MySQL守护进程的进程ID,使用ps输出不带header的RSS值。最后将其乘以 4 得到 RSS 大小(以 KiB 为单位)。 (默认页面大小为 4 KiB。)

ps 有大量信息——玩得开心!

外壳

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

输出

7808 KiB

【讨论】:

  • 感谢您为我解决了一些问题。如果您不介意我无法将其纳入我的脚本中。 code #!/bin/bash #file 包含以下输出: pstree mysql -a -p |awk '{print $1;}' | sed 's/|-{mysqld},//' >> psadd filename='psadd' #total= '0' echo Start while read p; do memU=ps -o rss= -p $p | awk '{print $1*4, "KiB"}' echo "进程 ID:"$p "内存使用情况:"$memU #total="$((total+memU))" #echo "这是当前运行总计:" $total done code 再次感谢您的帮助。
  • 没有时间编辑我的评论! pastebin.com/yUbHjU5j 您可以在上面的 Pastbin 中看到我的代码格式更好。 ps 抛出一个错误,但我认为我正确地传递了变量。再次感谢好先生。
  • 或者至少如何将 pid 列表传递给您给出的命令。我尝试使用变量 $p 没有运气。我尝试通过列表 /tmp/psadd ,它在每一行都有一个新的 pid 也没有运气。
  • pstree 没有列出 mysqld 和子进程,它列出了子线程。 “进程的子线程位于父进程下,并以大括号中的进程名称显示”man.cx/?page=pstree 令人困惑:)
  • ps 不是已经在KiB 中提供rss 而不是在pages 中吗?在manual 我可以找到resident set size, the non-swapped physical memory that a task has used (in kiloBytes). (alias rssize, rsz)。此外,密钥resident 将给出resident pages,而不是密钥rss 给出的resident set size。我想这意味着上面的命令会占用 4 倍的内存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多