0

我在某处读过这篇文章:

“对于一个普通的 Apache 服务器,如果你运行许多子进程并不重要——每个进程大约 1 MB(大部分是共享的),所以它们不会占用很多 RAM。情况不同mod_perl,其中进程可以轻松增长到 10 MB 甚至更多。例如,如果您将 MaxClients 设置为 50,则内存使用量变为 50 × 10 MB = 500 MB。您是否有 500 MB 的 RAM 专用于 mod_perl 服务器? "

我没有在我的服务器上使用 mod_perl。我在 apache2 的轨道上使用 phusion 乘客和 ruby​​。我正在使用 prefork MPM,MaxClients 设置为默认值 256。这意味着我可以在任何给定时间同时运行 256 个进程。这篇文章引起了我的兴趣,因为我从来没有同时运行 256 个 apache2 进程,通常在任何给定时间我只有 80 个 apache2 进程在运行。但有时即使只有 80 次我的服务器也会陷入困境,以至于当您尝试加载它时网站就会挂起。

当我运行以下命令时,有时会显示 80 个 apache2 进程,例如:

ps aux | grep apache2
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1130  0.0  0.1 149080 10600 ?        Ss   12:36   0:00 /usr/sbin/apache2 -k start
www-data  2051  0.0  0.3 163608 23592 ?        S    16:46   0:00 /usr/sbin/apache2 -k start
www-data  2506  0.0  0.1 149376  7952 ?        S    16:47   0:00 /usr/sbin/apache2 -k start
www-data  5149  0.0  0.1 149416  7980 ?        S    16:49   0:00 /usr/sbin/apache2 -k start
www-data  5175  0.0  0.1 149368  7876 ?        S    16:49   0:00 /usr/sbin/apache2 -k start
www-data 10212  0.0  0.1 149368  7848 ?        S    16:53   0:00 /usr/sbin/apache2 -k start
www-data 19114  0.0  0.1 149368  7904 ?        S    17:01   0:00 /usr/sbin/apache2 -k start
www-data 19138  0.0  0.1 150768 11856 ?        S    17:01   0:00 /usr/sbin/apache2 -k start
www-data 20592  0.0  0.1 149428  8092 ?        S    16:35   0:00 /usr/sbin/apache2 -k start
www-data 21336  0.0  0.1 149368  7808 ?        S    17:03   0:00 /usr/sbin/apache2 -k start
www-data 21375  0.0  0.1 149432  7916 ?        S    17:03   0:00 /usr/sbin/apache2 -k start
1000     26458  0.0  0.0   8112   896 pts/6    S+   17:07   0:00 grep apache2
www-data 30848  0.0  0.1 149396  8044 ?        S    16:43   0:00 /usr/sbin/apache2 -k start

但是在内存下,它们的范围从 0.1 到 0.4,这似乎不是很多内存。所以我的问题是,当您从浏览器向站点发送请求时,除了生成一个新的 apache2 进程作为父 apache2 进程的子进程之外,乘客是否还会创建另一个进程,这可能会导致内存陷入困境?当我运行 top 命令时,我注意到有时它会在 %100 CPU 上显示一个 ruby​​ 进程。我想知道 ruby​​ 进程是否以某种方式通过乘客链接到 apache2 进程。就像那篇文章所说的那样,一定有什么东西导致这些进程增长到大内存消费者。一定有什么我没看的。

顺便说一句,我的机器上有超过 5 个内存:

$ cat meminfo
MemTotal:        6113156 kB
4

1 回答 1

1

Phusion Passenger 分别生成您的 Ruby 应用程序进程。passenger-memory-stats用或查看它们passenger-status

于 2013-07-12T16:40:41.500 回答