linux - 如何计算从同一父进程派生的进程使用的总物理内存?

标签 linux memory-management nginx

我们使用 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/

相关文章:

linux - Linux 中的 .NET Core 不读取环境变量

linux - 如何授予用户(不是root用户)对react-native命令的访问权限?

objective-c - 引擎盖下的 __weak 限定变量是怎么回事?

c++ - 在调用者的堆栈上分配内存

nginx - debian 8 上 nginx 中的用户 'nginx' 在哪里

ruby-on-rails - nginx.conf - Passenger_env_var 未在 Rails 中加载

python - Flask, Gunicorn, Nginx::IOError: [Errno 32] 断管

linux - 无法在 Debian 8x 上安装 libnet-server-perl

linux - 如何在 Linux 上安装多个不同版本的 nginx?

c++ - 返回从成员映射的迭代器获得的 const 引用是否安全?