Nginx

如何以及在何處使用 Docker 為 php-fpm 配置 pm.max_children?

  • May 1, 2021

在一個使用 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.

引用自:https://serverfault.com/questions/884256