我目前正在测试一个新的 nginx/php-fpm 我已经在一个有 4GB RAM 的新 VPS 上进行了设置:
从我的 php-fpm 进程池配置:
pm = static
pm.max_children = 10
我有一个简单的 load.php 脚本,它模拟了一个长时间运行的 mysql 查询:
<?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 个请求之前处理 10 个请求(每个请求 5 秒)吗?当然,从看起来大致如此的日志来看,这是正确的吗?
如果是这种情况并且我正在运行一个 php 应用程序,如果在 DB 端(因此在 php 进程时间层)相当繁重,我是否应该简单地增加子进程的数量以加快它需要多长时间同时处理请求?
pm.max_children
意味着您一次只能运行那么多 php 进程。如果它们都需要很长时间,那么你就被束缚了,其他传入的连接必须等待。要解决此问题,请将 php-fpm 池的大小增加到在给定资源限制的情况下可以解决的最大值。