1. 程式人生 > >day 52 php-fpm相關

day 52 php-fpm相關

12.21 php-fpm的pool

  • 如果所有網站使用一個pool,其中一個網站發生故障,則會耗盡php資源,造成其它站點出現502的狀態,因此有必要將各個站點隔離開來,每個站點使用一個單獨的pool,可以在/usr/local/php/etc/php-fpm.conf檔案中繼續配置其它的pool,在/usr/local/nginx//conf/vhost定義一個新的test.conf檔案,fastcgi_pass unix指定一個其它的socket檔案
  • vim /usr/local/php/etc/php-fpm.conf                          #編輯php-fpm.conf檔案,在[global]部分增加如下內容
include = etc/php-fpm.d/*.conf
  • mkdir /usr/local/php/etc/php-fpm.d/
  • cd /usr/local/php/etc/php-fpm.d
  • vim www.conf                   #在對應路徑下建立並編輯www.conf檔案
[www] #一個 pool listen = /tmp/www.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
  • vim aming.conf                       #繼續建立並編輯另一個conf檔案
[aming] #另一個pool listen = /tmp/aming.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
  • /usr/local/php-fpm/sbin/php-fpm -t                    #檢查語法錯誤
  • /etc/init.d/php-fpm restart                                  #重啟php-fpm
12.22 php-fpm的慢執行日誌
  • vim /usr/local/php-fpm/etc/php-fpm.d/www.conf                 #編輯www.comf檔案,加入如下內容
request_slowlog_timeout = 1 #表示超過1秒則會記錄日誌 slowlog = /usr/local/php-fpm/var/log/www-slow.log #慢日誌存放路徑
  • 配置nginx的虛擬主機test.com.conf,把unix:/tmp/php-fcgi.sock改為unix:/tmp/www.sock
  • 重新載入nginx服務
  • vim /data/wwwroot/test.com/sleep.php                #寫入如下內容
<?php echo “test slow log”;sleep(2);echo “done”;?>
  • curl -x127.0.0.1:80 test.com/sleep.php                     #命令列測試  
  • cat /usr/local/php-fpm/var/log/www-slow.log             #檢視生成的慢日誌,日誌中會指明sleep.php檔案中第3行執行慢,因其執行了2秒,超過1秒,故會生成慢日誌
12.23 open_basedir
php-fpm定義open_basedir
  • vim /usr/local/php-fpm/etc/php-fpm.d/test.conf                                                   #編輯test.conf 檔案,加入如下內容
                  php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/               #定義open_basedir
  • /data/wwwroot/test.com/test.php                        #建立測試php指令碼test.php,
  • curl -x127.0.0.1:80 test.com/test.php                 #命令列進行測試
  • 再次更改test.conf,修改路徑,如果路徑不對,再次測試則會出問題
  • vim /usr/local/php-fpm/etc/php.ini #編輯php.ini 檔案,配置錯誤日誌,設定display_errors = Off,log_errors = On,error_log = /usr/local/php-fpm/var/log/php_errors.log,errot_reporting = E_ALL
  • touch /usr/local/php-fpm/var/log/php_errors.log #手動生成錯誤日誌
  • chmod 777 /usr/local/php-fpm/var/log/php_errors.log #更改錯誤日誌許可權,避免不能寫入
  • /etc/init.d/php-fpm restart 
  • 在open_basedir指定為錯誤路徑的情況下, curl命令列再次測試,並檢視錯誤日誌
12.24 php-fpm程序管理
  • cat /usr/local/php/etc/php-fpm.d/www.conf #檢視www.conf檔案,會有如下部分內容
  • pm = dynamic                                                          #表示動態程序管理,根據需求自動生成會銷子程序,也可以是static
  • pm.max_children = 50                                            #最大子程序數,ps aux可以檢視,如果上一步配置為static,只有該行生效
  • pm.start_servers = 20                                             #啟動服務時會啟動的程序數
  • pm.min_spare_servers = 5                                     #定義在空閒時段,子程序數的最少數量,如果達到這個數值時,php-fpm服務會自動派生新的子程序。
  • pm.max_spare_servers = 35                                  #定義在空閒時段,子程序數的最大值,如果高於這個數值就開始清理空閒的子程序。
  • pm.max_requests = 500                                         #定義一個子程序最多處理的請求數,也就是說在一個php-fpm的子程序最多可以處理這麼多請求,當達到這個數值時,它會自動退出。