如何使用shell获取linux中多个子进程的总内存?

如何使用shell获取linux中多个子进程的总内存?,linux,bash,shell,memory,Linux,Bash,Shell,Memory,http守护进程,例如: 我使用ps aux | grep httpd | grep-v grep: USER PID RSS COMMAND root 14347 3220 /usr/sbin/httpd apache 14348 2400 /usr/sbin/httpd apache 14349 2400 /usr/sbin/httpd apache 14350 2400 /usr/sbin/httpd 我可以简单地累积RSS

http守护进程,例如:

我使用ps aux | grep httpd | grep-v grep:

USER     PID     RSS   COMMAND
root     14347   3220  /usr/sbin/httpd
apache   14348   2400  /usr/sbin/httpd
apache   14349   2400  /usr/sbin/httpd
apache   14350   2400  /usr/sbin/httpd
我可以简单地累积RSS字段以获得[httpd]的总内存使用量。3220+2400+2400+2400=10420

但我知道,子进程有共享内存。这里有一些冗余计算。实际上,总内存使用量可能小于10420


我的问题是如何获得实际的内存使用情况

如果需要获取实际内存使用情况,则需要在Valgrind之类的探查器中运行它

参考文献

可能是您最准确的选择,但使用起来可能有点笨拙,而且由于性能原因,对于生产系统来说是不合理的(实际上没有)


Smem()是一个不太复杂的替代方案
PSS
进程集大小是您需要的。

我在Chrome上使用了以下命令:

ps aux | grep chrome | grep -v grep | awk '{s+=$5} END {print s}'
请注意,$5实际上可能会有所不同,这取决于
ps aux
实际显示其输出的方式。这可能对您有用,也可能不有用,还以字节为单位显示总使用量。

您可以尝试
pmap$(pgrep httpd)
-它提供虚拟内存地址空间信息。