php-fpm 配置進程池


什么是 php-fpm :php 是作為一個獨立服務存在的,這個服務叫做 php-fpm
什么是 php-fpm pool :也就是 php-fpm 的進程池,這個進程池中運行了多個子進程,用來並發處理所有連接的動態請求
為什么要配置多個 pool :Nginx 接收到 php 動態請求會傳給 php-fpm 處理,php-fpm 調用 pool 中的子進程來處理動態請求,如果這個 pool 資源耗盡,會導致其他站點無法訪問資源,報 502 錯誤,因此有必要設置多個 php-fpm pool

默認只配置了一個 php-fpm pool :

[root@localhost ~]$ cat /usr/local/php/etc/php-fpm.conf

[global]                                          # 全局配置 
pid = /usr/local/php/var/run/php-fpm.pid          # php-fpm pid 文件
error_log = /usr/local/php/var/log/php-fpm.log    # php-fpm 錯誤日志路徑

[www]                           # 進程池名稱
listen = /tmp/php-fcgi.sock     # The address on which to accept FastCGI requests
listen.mode = 666               # Set permissions for unix socket, read/write permissions must be set in order to allow connections from a web server
user = php                      # Set the user who can accept FastCGI
group = php                     # Set the group who can accept FastCGI
pm = dynamic                    # 設置進程池中子進程的數目為動態的,它的數目基於下面的指令的值,關於 pm 的設置可以參考:https://gist.github.com/sotarok/2767859
pm.max_children = 50            # 同一時刻能夠存在的最大子進程的數量
pm.start_servers = 20           # 在啟動 php-fpm 時,要啟動的子進程數量
pm.min_spare_servers = 5        # 處於空閑狀態的最小子進程數量
pm.max_spare_servers = 35       # 處於空閑狀態的最大子進程數量
pm.max_requests = 500           # 每個子進程最多能處理多少個請求,達到數量后就自動退出進程池
rlimit_files = 1024             # 限制打開的文件描述符數量,這個一般是通過 ulimit 設置

配置多個 php-fpm pool :

[root@localhost ~]$ cat /usr/local/php/etc/php-fpm.conf

[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log

[www]
listen = /tmp/php-fcgi.sock
listen.mode = 666
user = php
group = php
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024

[www2]
listen = /tmp/php-fcgi2.sock
listen.mode = 666
user = php
group = php
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
[root@localhost ~]$ /usr/local/php/sbin/php-fpm -t
[root@localhost ~]$ /etc/init.d/php-fpm reload
[root@localhost ~]$ ps aux | grep php-fpm

Nginx 如何使用不同的 php-fpm pool :

[root@localhost ~]$ cat /usr/local/nginx/conf/vhost/test.com.conf 
server {
    listen 80;
    server_name www.test.com;
    index index.html index.html index.php;
    root /data/www;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-fcgi.sock;    # 在這里指定使用哪個進程池
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
    }
} 

 

 

 

 

 

 

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM