Apache 为何运行如此多进程?是不是内存过大?

Apache 为何运行如此多进程?是不是内存过大?

我注意到 Apache 在我的 LAMP 服务器 (ubuntu 10.10) 上运行多个进程。我刚刚运行了一个以 MySQL 为数据库的 Wordpress 网站。似乎 www-data 运行的 apache2 比它应该运行的要多 (也使用了太多内存),我说得对吗:

ID      Owner       Size        Command   
31200   www-data    251236 kB   /usr/sbin/apache2 -k start
20678   www-data    250948 kB   /usr/sbin/apache2 -k start
25781   www-data    248888 kB   /usr/sbin/apache2 -k start
31045   www-data    248844 kB   /usr/sbin/apache2 -k start
19926   www-data    246480 kB   /usr/sbin/apache2 -k start
20749   www-data    239380 kB   /usr/sbin/apache2 -k start
32616   www-data    238632 kB   /usr/sbin/apache2 -k start
8846    mysql   238128 kB   /usr/sbin/mysqld
24178   www-data    234228 kB   /usr/sbin/apache2 -k start
32618   www-data    232344 kB   /usr/sbin/apache2 -k start
32615   www-data    232204 kB   /usr/sbin/apache2 -k start
19805   root    208156 kB   /usr/sbin/apache2 -k start

答案1

Apache 正在运行多个进程,以便在客户端请求到来时做好准备。生成服务器进程很慢,所以最好让一个进程等待客户端。

对于内存使用情况,您应该考虑 RES 大小(如 top 所示),即任务使用的物理内存量。

您认为为什么有太多 apache2 进程占用过多内存?您预期会怎样?您为什么预期会这样?

答案2

正如 Pawel 的回答所解释的那样,apache 使用带有进程池的每个请求进程模型(或使用 mpm_worker 每个请求线程)。

您可以使用基于非阻塞 IO 的 Web 服务器(例如 nginx)来减少内存使用量。这样,服务器就不需要为每个连接专门分配一个进程/线程。

答案3

Apache 将运行您配置的任意数量的进程。如果您使用的是预分叉或者工人多处理模块。

相关内容