Apache2,4 + Prefork + 保持活动状态

Apache2,4 + Prefork + 保持活动状态

我正在尝试加速一个包含大量图像的网站,这些图像由单独的子域 static.example.com(与 www. 相同的 IP)提供。

使用 pingdom 工具注意到前 5-6 个请求(在 static.example.com 上)正在建立完整的连接(DNS+SSL+Send+Wait+Receive+Connect)。

这和 prefork 配置有关系吗?

<IfModule mpm_prefork_module>
StartServers            20
    MinSpareServers           20
    MaxSpareServers          20
    ServerLimit             150
    MaxRequestWorkers        150
    MaxConnectionsPerChild   10000
    MaxRequestsPerChild 500
</IfModule>

这是一台 4GB 的机器,流量不大。

平均 Apache 大小:

ps aux | grep'apache2'| awk'{print $6/1024;}'| awk'{avg += ($1 - avg) / NR;} END {print avg " MB";}'

11.2921 MB

MySQL 大约 500MB

KeepAlive 开启,MaxKeepAliveRequests 100,KeepAliveTimeout 5

不确定如何解决这个问题。切换到 MPM-Event 模块有帮助吗?

答案1

是的,您应该切换到事件。

使用 prefork 时,每个连接都需要 1 个进程。除非您在启动时“预加载”它们,否则从 CPU 角度来看,生成进程比生成新线程更耗费 CPU。

但是仍然要提供静态内容和那些规格,您可以轻松地使用带有事件 mpm 的 httpd,并通过几个进程轻松允许 1000 个线程。

一个例子:

StartServers            1
ServerLimit             5
MinSpareThreads         100
MaxSpareThreads         600
ThreadsPerChild         200
ThreadLimit             200
MaxRequestWorkers       10000
MaxConnectionsPerChild  10000000

如果您被迫使用 prefork,例如使用非线程安全的 mod_php 模块,请考虑迁移到 mod_proxy_fcgi -> PHP-FPM。

httpd wiki 上的 php-fpm 信息

相关内容