我们使用 nginx 作为代理服务。我们对它进行了大量定制,它占用了大量内存。
在启动时,nginx master 使用 1.5GB 内存并且 master fork 了很多 worker。所以一开始每个worker使用从master进程继承的1.5GB内存。在处理请求时,worker 可能会修改这些继承的内存,并且将触发写时复制,以便使用更多的物理内存。 worker 也可以为自己分配内存。
我们的问题是如何计算这组进程的总内存。困难的是这些进程使用的大量内存使用物理内存的相同部分,因此我们不能简单地将每个进程使用的内存相加以获得总内存使用量。
最佳答案
进程使用的摊销内存可以从 Pss 中计算出来。参见 http://lwn.net/Articles/230975/有关 Pss 的更多信息。
对于一组进程使用的总内存,在本例中是nginx主进程和所有从进程,我们可以使用以下脚本来总结这些进程的所有Pss:
for pid in $(pgrep nginx); do cat /proc/$pid/smaps; done | awk '/Pss/ {mem += $2} END {print mem, "kB"}'
关于linux - 如何计算从同一父进程派生的进程使用的总物理内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34600860/