在一个使用Nginx和PHP-FPM的Web应用程序中,我注意到了缓慢的时刻和分析日志,我发现这个消息不时出现:
[19-Nov-2017 19:24:09] WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
经过一番研究之后,我增加了php.iniconfiguration文件中的值, 停止并移除了php容器并重build它 ,因为设置为卷上的文件的设置已经生效。
分析容器中的configuration文件,它与我设置的新值相关,但是关于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
这是./php/config/php.ini的一个片段:
pm = dynamic pm.max_children = 40 pm.start_servers = 15 pm.min_spare_servers = 15 pm.max_spare_servers = 25
而且,如果我运行:
$ docker exec -it docker_pi_php_1 cat /usr/local/etc/php/php.ini
我在上面的代码片段中看到相同的值。
容器内configuration文件的path是正确的,我跑了:
$ php --ini
在容器内部,path在加载的configuration文件列表中。
我已经开始尝试解决这个问题,但是到目前为止我还没有成功。
有任何想法吗?
我可能是错的,但假设你使用的是官方的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设置一个更高的值。