我正在尝试为 php-fpm v7.3 启用动态进程管理。这是我的php-pm.ini
[www]
pm = dynamic
pm.max_children = 25
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 498
问题是我似乎无法确认我的 fpm 看到了这些变化。我可以看到它正在解析ini文件:
$ docker-compose exec web php -i | grep "pm."
Additional .ini files parsed => /usr/local/etc/php/conf.d/docker-php-ext-gd.ini,
/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pcntl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini,
/usr/local/etc/php/conf.d/php-pm.ini
通过 fpm查看phpinfo()
服务,我根本看不到任何pm.
设置。我如何验证这些设置是否被拾取?如果它们是但不会在这里显示,我该如何证明呢?
您不会看到这些设置
php -i
,因为它是与代码相关的设置。尝试设置pm.status_path = /status
,然后转到您的http://localhost/status URL,在那里您将看到您的 php-fpm 选项。您还可以查看进程列表以查看当前与命令一起使用的配置文件,
ps aux | grep php-fpm | grep master
或者您将在命令的输出中看到它php-fpm -t
。当然,您必须将其传递给您的 docker 容器。
由 OP/Webnet 编辑
这个解决方案引导了我的一部分,但还有其他部分帮助我解决了它。由于这使我走上了最初的道路,因此我想确保 patok 获得信誉,因此我将在此处扩展解决方案。
/usr/local/etc/php/conf.d/
我需要做的是/usr/local/etc/php-fpm.d/www.conf
在我的容器内修改 fpm 的配置,而不是通过加载一个额外的 ini 文件(.conf
如果你愿意,你可以添加一个额外的文件,但我没有)。将此添加到 dockerfile 完成了任务:通过遵循 PHP-FPM 中概述的做法,我能够确认此解决方案有效:流程管理,其中包括使用
ab -n 10000 -c 200 http://localhost/index.php
模拟对我的站点的 10k 请求,使我能够使用docker-compose exec web ps aux | grep php-fpm
(如 patok 所述)查看 fpm 进程的数量有确实增加了处理负载。