如何计算从同一父进程分叉的进程使用的总物理内存?

时间:2016-01-04 22:15:36

标签: linux memory-management nginx

我们正在使用nginx进行代理服务。我们对它进行了大量定制,并且使用了大量内存。

在启动时,nginx master使用1.5GB内存,而master会分配许多worker。因此,每个工作者在开始时使用从主进程继承的1.5GB内存。处理请求时,工作人员可以修改这些继承的内存,并且将触发copy-on-write,以便使用更多的物理内存。工人也可以为自己分配内存。

我们的问题是如何计算这些进程组的总内存。困难的是这些进程使用的大量内存使用相同部分的物理内存,因此我们不能简单地将每个进程的已用内存加起来以获得总内存使用量。

1 个答案:

答案 0 :(得分:2)

进程使用的分摊内存可以从Pss计算得出。有关Pss。

的详细信息,请参阅http://lwn.net/Articles/230975/

对于一组进程使用的总内存,在本例中是nginx主进程和所有从进程,我们可以使用以下脚本来总结这些进程的所有Pss:

for pid in $(pgrep nginx); do cat /proc/$pid/smaps; done | awk '/Pss/ {mem += $2} END {print mem, "kB"}'