一個Nginx服務器可能運行多個站點,那麼php-fpm使用同一個pool資源,當一個站點資源耗盡以後,就有可能會影響全部站點都不能訪問。每一個站點使用獨立的pool,就可以避免這種狀況發生。php
編輯php-fpm.conf配置文件:在[global]中增長一個pool [lgs.com]nginx
[lgs.com] //pool名 listen = /tmp/lgs.sock //每一個pool監聽的sock都不同,這裏就是要區分開不一樣站點的地方 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
驗證:ps一下就能看到有兩個php-fpm的pool:vim
php-fpm 6115 0.0 0.4 226640 4716 ? S 16:10 0:00 php-fpm: pool www php-fpm 6116 0.0 0.4 226640 4712 ? S 16:10 0:00 php-fpm: pool lgs.com
而後須要到nginx的虛擬主機配置文件裏去配置php-fpm指定的pool服務器
location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/lgs.sock; //這裏指定pool的sock fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name; //代理服務器的ip }
咱們還能夠像nginx的虛擬主機配置文件同樣,把php-fpm的pool獨立出來單獨一個配置文件:例如lgs.com的pool配置文件爲lgs.confphp-fpm
先在php-fpm.conf增長include 配置行測試
include = etc/php-fpm.d/*.conf
再編輯www和lgs.com的pool配置文件分別爲 www .conf 和 lgs.conf:網站
[www] //www .conf listen = /tmp/php-fcgi.sock 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 [lgs.com] //lgs.conf listen = /tmp/lgs.sock 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
Nginx有一個很好的特性就是慢執行日誌。能夠定義php執行超過指定時間,就會記錄到慢執行日誌中去,記錄那個文件那行代碼執行過程慢。spa
在pool的配置文件裏配置代理
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf request_slowlog_timeout = 2 //php執行超過2秒 記錄日誌 slowlog = /usr/local/php-fpm/var/log/www-slow.log //存放日誌的目錄
驗證測試:編輯一個php 的sleep腳本:unix
vim /data/wwwroot/test.com/sleep.php <?php echo "test slow log"; sleep(3); echo "done"; ?>
查看日誌:
tail /usr/local/php-fpm/var/log/www-slow.log script_filename = /data/wwwroot/test.com/sleep.php [0x00007fe02657e3e0] sleep() /data/wwwroot/test.com/sleep.php:3
當服務器運行多個站點時,php-fpm能夠使用open_basedir來指定每一個站點的目錄範圍,不能在php.ini中去只能指定一個目錄。
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf //在pool的配置文件中增長一行配置 php_aming_value[open_basedir]=/data/wwwroot/test.com:/tmp/ //指定該站點的網站目錄
php-fpm的pool配置文件中的關於進程的配置行的說明
vim www.conf [www] listen = /tmp/php-fcgi.sock listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic //定義進程啓動方式(dynamic表示動態,static表示靜態) //只有pm設置爲dynamic,下面的配置才生效 pm.max_children = 50 //最多啓動的子進程數量 pm.start_servers = 20 //開始啓動的子進程數量 pm.min_spare_servers = 5 //空閒時最少有幾個子進程,到5個就會自動增長 pm.max_spare_servers = 35 //空閒時最多有幾個子進程,到35個就會自定清理 pm.max_requests = 500 //一個子進程最多可接受多少個請求,到達500就會自動退出子進程 rlimit_files = 1024 //每一個子進程打開的文件句柄個數