我注意到 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)来减少内存使用量。这样,服务器就不需要为每个连接专门分配一个进程/线程。