lfa*_*ida 13 nginx php-fpm docker docker-compose
在使用 Nginx 和 PHP-FPM 的 Web 应用程序中,我注意到缓慢和分析日志的时刻,我发现了这条消息,它不时出现:
[19-Nov-2017 19:24:09] WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
Run Code Online (Sandbox Code Playgroud)
经过一番研究,我增加了 php.ini 配置文件中的值,停止并删除了 php 容器并重建它,因为设置为卷上文件的设置有效。
分析容器内的配置文件,它是我设置的新值,但是,关于 pm.max_children (5) 的错误消息继续出现。
Here is my docker-compose.yml
version: '2'
services:
pi_web:
build: ./nginx
ports:
- "80:80"
- "443:443"
volumes:
- ../src:/src
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- /etc/letsencrypt:/etc/letsencrypt
pi_php:
build: ./php
volumes:
- ../src:/src
- ./php/config/php.ini:/usr/local/etc/php/php.ini
Run Code Online (Sandbox Code Playgroud)
这是 ./php/config/php.ini 的一个片段:
pm = dynamic
pm.max_children = 40
pm.start_servers = 15
pm.min_spare_servers = 15
pm.max_spare_servers = 25
Run Code Online (Sandbox Code Playgroud)
而且,如果我运行:
$ docker exec -it docker_pi_php_1 cat /usr/local/etc/php/php.ini
Run Code Online (Sandbox Code Playgroud)
我在上面的代码片段中看到了相同的值。
容器内配置文件的路径是正确的,我跑了:
$ php --ini
Run Code Online (Sandbox Code Playgroud)
在容器内部,路径在加载的配置文件列表中。
我已经绞尽脑汁试图解决这个问题,但到目前为止我还没有成功。
有任何想法吗?
小智 13
我可能是错的,但假设您使用的是官方 PHP 图像,那么这些 pm 设置应该放在/usr/local/etc/php-fpm.d/
具有 conf 扩展名的文件内的目录中。根据 PHP 文档,这些设置与 FPM相关,虽然它们使用php.ini
语法,但它们应该放在不同的文件中,所以我相信你的 pm 设置被忽略了。这个PHP 中的 Dockerfile 帮助我找出那些 conf 文件应该在哪里。
我会检查/usr/local/etc/php-fpm.d/www.conf
您的容器中是否有一个文件,该文件max_children
现在设置为5
. 如果是这样,我猜您可以修改 Dockerfile 以复制一个新的 www.conf 文件,该文件为pm.max_children
.
小智 11
我发现使用官方图像附带的文件覆盖特定设置更清晰php:7.3-fpm
:/usr/local/etc/php-fpm.d/zz-docker.conf
该文件以如下内容结尾:
[www]
listen = 9000
Run Code Online (Sandbox Code Playgroud)
因此,我们只需将我们需要为 www 池设置的内容附加到它即可。
例如:
# SETUP PHP-FPM CONFIG SETTINGS (max_children / max_requests)
RUN echo 'pm.max_children = 15' >> /usr/local/etc/php-fpm.d/zz-docker.conf && \
echo 'pm.max_requests = 500' >> /usr/local/etc/php-fpm.d/zz-docker.conf
Run Code Online (Sandbox Code Playgroud)
我认为它更简单、更清晰。
归档时间: |
|
查看次数: |
14028 次 |
最近记录: |