我在 Debian 6 LAMP 上,带有 apache mpm_prefork
我有
Timeout 20
KeepAlive On
MaxKeepAliveRequests 80
KeepAliveTimeout 2
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 500
MaxClients 500
MaxRequestsPerChild 1500
</IfModule>
具有 4GB RAM。问题是 Apache2 启动了太多进程。每当我这样做top
时,大多数时候只有 1 个进程在运行,而休眠的 apache2 进程数量会随着时间的推移而增加(现在有 437 个进程并且还在增加)
我可以知道为什么 apache2 会启动新进程而不是使用已打开的进程吗?我如何告诉 apache 不要打开那么多进程?
谢谢
答案1
您已经告诉 Apache,您希望能够同时为 500 个客户端提供服务,并且对客户端进程池的数量设置 500 的硬性限制。
当 Apache 收到请求时,它将开始扩展其进程池,直到接近您的限制。
由于您使用的是预分叉服务器,每个进程仅处理单个请求线程,因此 Apache 需要维护大量休眠进程才能处理您指定的同时客户端数量。这些进程会占用大量内存。
您可以切换到线程 MPM 模型,降低 MaxClients 的值或增加 RAM 量。请参阅两者http://httpd.apache.org/docs/2.0/mod/prefork.html和http://httpd.apache.org/docs/2.0/mod/mpm_common.html。