我在某处读到了这篇文章:
“使用普通的Apache服务器,如果运行许多子进程并不重要 - 每个进程大约1 MB(大部分共享),因此它们不会占用大量RAM。与mod_perl不同,其中进程可以轻松增长到10 MB甚至更多。例如,如果MaxClients设置为50,则内存使用量变为50×10 MB = 500 MB。你有500 MB的RAM专用于mod_perl服务器?“
我没有在我的服务器上使用mod_perl。我正在使用apache2在轨道上使用phusion乘客和红宝石。我正在使用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
答案 0 :(得分:0)
Phusion Passenger分别生成您的Ruby应用程序进程。使用passenger-memory-stats
或passenger-status