LNMP架構二十四(php-fpm的pool)
二十四、php-fpm的pool
php-fpm的Pool池是支援定義多個pool的。每個pool可以監聽不同的sock、tcp/ip。那nginx有好幾個站點,每個站點可以使用一個pool。這樣做的好處是當其中的一個php502(可能是php資源不夠)了。如果所有的網站使用同一個池,那其中一個網站發生一些故障,比如程式設計師寫的一些程式有問題,就會把php資源耗盡,這樣的結果就是其他站點的php也會502。所以有必要把每一個站點隔離開,每個pool的名字要唯一。
建立一個pool
# cat /usr/local/php-fpm/etc/php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log。。。。。。。。
。。。。。。。。
[www]
listen = /tmp/php-fcgi.sock
#listen =127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
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
建立多個pool
# cat /usr/local/php-fpm/etc/php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.loginclude = etc/php-fpm.d/*.conf
。。。。。。。。。
。。。。。。。。。
[[email protected] php-fpm.d]# vi www.conf
[www]
listen = /tmp/php-fcgi.sock
#listen =127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
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[[email protected] php-fpm.d]# vi xavi.conf
[xavi.com]
listen = /tmp/xavier.sock
#listen =127.0.0.1:9001
listen.mode = 666
user = php-fpm
group = php-fpm
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
測試
#/usr/local/php-fpm/sbin/php-fpm -t
#/etc/init.d/php-fpm restart
在php-fpm的配置檔案中,有兩個指令非常重要,就是"pm.max_children" 和 "request_terminate_timeout"
第一個指令"pm.max_children" 表示的是php-fpm的最大子程序數,確定了php-fpm的處理能力,原則上時越多越好,但這個是在記憶體足夠打的前提下,每開啟一個php-fpm程序要佔用近30M左右的記憶體。
如果請求訪問較多,那麼可能會出現502,504錯誤。對於502錯誤來說,屬於繁忙程序而造成的,對於504來說,就是客戶傳送的請求在限定的時間內沒有得到相應,過多的請求導致“504 Gateway Time-out”。這裡也有可能是伺服器頻寬問題。
另外一個需要注意的指令"request_terminate_timeout",它決定php-fpm程序的連線/傳送和讀取的時間,如果設定過小很容易出現"502 Bad Gateway" 和 “504 Gateway Time-out”,預設為0,就是說沒有啟用,不加限制,但是這種設定前提是你的php-fpm足夠健康,這個需要根據實際情況加以限定。