我目前正在测试一个新的 nginx/php-fpm,我已经在具有 4GB RAM 的新 VPS 上设置了它:
来自我的 php-fpm 进程池配置:
pm = static
pm.max_children = 10
我有一个简单的 load.php 脚本,其中模拟了以下内容:
<?php
echo sleep(5);
echo "you see me after 5 seconds";
?>
然后我向这个脚本添加一些负载,如下所示:
ab -n 1000 -c 100 http://mydomain.com/load.php
当我跟踪 nginx 访问日志时,我看到每次只有少量的请求 - 而不是我期望的高吞吐量。
数据究竟如何从 nginx 流向 php 后端并返回?
如果我有 10 个静态子进程,php 后端是否会先处理 10 个请求(每个请求 5 秒),然后再接受另外 10 个请求?从日志来看,情况大致如此 - 这是正确的吗?
如果是这种情况,并且我正在运行一个 php 应用程序,如果该应用程序在 DB 端(以及因此在 php 进程时间层)相当繁重,我是否应该简单地增加子进程的数量来加快并发处理请求所需的时间?
答案1
pm.max_children
意味着您一次只能运行那么多 php 进程。如果它们都耗费很长时间,那么您就被占用了,其他传入连接必须等待。要解决此问题,请将 php-fpm 池的大小增加到资源限制下可以承受的最大值。