HTTPD + MPM_EVENT + PHP_FPM

HTTPD + MPM_EVENT + PHP_FPM

我已经创建了一个docker容器,内容如下

操作系统:Debian 11

WebServer:httpd2.4(已启用 mpm_event)

后端:PHP-FPM

Docker 在 EC2 中运行,我为 Docker 容器提供了 10GB RAM 和 5CPU。

UI 上的一切运行正常,我的应用程序运行良好。现在我期待优化服务器以增加并发请求和性能。

所以我所做的是

httpd.conf(/usr/local/apache2/conf/httpd.conf)

启用了 mpm_event 模块,注释了 mpm_prefork 和 mpm_worker 模块,添加了以下配置

<IfModule mpm_event_module>
        ServerLimit     256
        StartServers    125
        MinSpareThreads 100
        MaxSpareThreads 150
        ThreadLimit     64
        ThreadsPerChild 25
        MaxRequestWorkers       2000
        MaxConnectionsPerChild  10000
</IfModule>

PHP-FPM 配置

pm = dynamic            
pm.max_children = 256      
pm.start_servers = 125   
pm.min_spare_servers = 100     
pm.max_spare_servers = 150
pm.max_requests = 1000
m.max_spawn_rate = 100

当我尝试使用 apache 基准测试 `ab -n 500 -c 100“http://localhost/test.php” 检查负载测试时,需要 35 秒才能加载。

在 mpm_event 模块之前,我使用 prefork,并在 16 秒内得到响应。不知道我错过了什么

答案1

对类似事件的线程 mpm 使用更正确的方法。您当然不需要也不应该使用这么多子进程。虽然我的提示不是完美的科学,但至少在疯狂分配进程之前要考虑可用的 CPU 核心数量。

这是实现 2000 名工人的更明智的方法。

StartServers            1
ServerLimit             4
MinSpareThreads         100
MaxSpareThreads         1200
ThreadsPerChild         500
ThreadLimit             500
MaxRequestWorkers       2000
MaxConnectionsPerChild  100000000

相关内容