Nginx
如何以及在何處使用 Docker 為 php-fpm 配置 pm.max_children?
在一個使用 Nginx 和 PHP-FPM 的 Web 應用程序中,我注意到了一些緩慢的時刻並分析了日誌,我發現了這條消息,它不時出現:
[19-Nov-2017 19:24:09] WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
經過一番研究,我增加了 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
這是 ./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
我在上面的程式碼片段中看到了相同的值。
容器內配置文件的路徑是正確的,我跑了:
$ php --ini
在容器內,路徑在載入的配置文件列表中。
我已經絞盡腦汁試圖解決這個問題,但到目前為止我還沒有成功。
有任何想法嗎?
我可能是錯的,但假設您使用的是官方 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
.