2018-3-19 13周1次課 php-fpm的pool、慢日誌、進程、open_basedir
php-fpm支持定義多個pool,每個pool可以監聽不同的socket或者不同的tcp/ip;
如果nginx有多個不同的站點,那麽每個站點都可以使用一個pool;
如果所有網站都使用了同一個pool,當其中給一個php資源不夠了,或者其他原因導致502了,網站出問題了,那麽所有站點都不能正常使用了;
因此我們有必要把不同的站點隔離開,使用不同pool。
設置多個pool:
[root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.conf
[root@localhost ~]# /usr/local/php-fpm/sbin/php-fpm -t [17-Mar-2018 22:31:02] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful [root@localhost ~]# /etc/init.d/php-fpm reload Reload service php-fpm done [root@localhost ~]# ps aux|grep php-fpm
此時有兩個pool能夠使用,那麽將另外一個站點定義在aming.com這個pool下
[root@localhost ~]# vim /usr/local/nginx/conf/vhost/aaa.com.conf
為了讓不同的pool能夠顯示的更加清楚,可以把不同pool的參數信息分開到不同的conf中
[root@localhost ~]# cd /usr/local/php-fpm/etc/ [root@localhost etc]# mkdir php-fpm.d/ [root@localhost etc]# cd php-fpm.d/
然後將原先php-fpm.conf中定義的兩個不同的pool差分開
[root@localhost php-fpm.d]# vim www.conf
[root@localhost php-fpm.d]# vim aming.conf
刪除原先php-fpm.conf中pool的信息,並且在[global]中添加include = etc/php-fpm.d/*.conf
(這個類似於nginx中對不同vhost的配置方法)
[root@localhost php-fpm.d]# vim /usr/local/php-fpm/etc/php-fpm.conf
[root@localhost php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t [17-Mar-2018 23:00:48] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful [root@localhost php-fpm.d]# /etc/init.d/php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done [root@localhost php-fpm.d]# ps aux|grep php-fpm
aming.com在www之前,因此pool生效了
目的:為了記錄網站訪問慢的原因,方便查找原因
·增加請求超時記錄的配置:
[root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
[root@localhost ~]# /usr/local/php-fpm/sbin/php-fpm -t [18-Mar-2018 14:01:03] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful [root@localhost ~]# /etc/init.d/php-fpm reload Reload service php-fpm done [root@localhost ~]# ls /usr/local/php-fpm/var/log/ php-fpm.log www-slow.log
寫一個php腳本,模擬超過1秒的php執行
因為php-fcgi.sock被test.com這個站點使用者,因此在test.com下創建cleep.php
[root@localhost ~]# vim /data/wwwroot/test.com/sleep.php
[root@localhost ~]# curl -x127.0.0.1:80 test.com/sleep.php test slow logdone[root@localhost ~]# cat /usr/local/php-fpm/var/log/www-slow.log [18-Mar-2018 14:51:15] [pool www] pid 1578 script_filename = /data/wwwroot/test.com/sleep.php [0x00007f39874b9280] sleep() /data/wwwroot/test.com/sleep.php:2
(上方顯示sleep.php腳本的第2行慢)
·一般請求時間request_slowlog_timeout = 定義大於2秒,因為大部分php執行時間介於1~2秒之間,定義大於2秒可以過濾掉很多不需要的信息。
[root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
[root@localhost ~]# curl -x127.0.0.1:80 test.com/3.php -I HTTP/1.1 200 OK Server: nginx/1.12.2 Date: Sun, 18 Mar 2018 07:11:24 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/5.6.30
·配置php-fpm錯誤日誌:
·關閉顯示錯誤:display_errors = Off
·選擇記錄日誌級別:error_reportint = E_ALL
·打開錯誤日誌開關:log_errors = On
·配置錯誤日誌保存位置:error_log = /usr/local/php-fpm/var/log/php_errors.log
·錯誤日誌路徑如果不存在的話,需要重新創建
[root@localhost ~]# touch /usr/local/php-fpm/var/log/php_errors.log [root@localhost ~]# chmod 777 !$ chmod 777 /usr/local/php-fpm/var/log/php_errors.log
·我們把www.conf中配置open_basedir改錯,繼續訪問,查看錯誤日誌
[root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
[root@localhost ~]# /etc/init.d/php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done [root@localhost ~]# curl -x127.0.0.1:80 test.com/3.php No input file specified. [root@localhost ~]# curl -x127.0.0.1:80 test.com/3.php -I HTTP/1.1 404 Not Found Server: nginx/1.12.2 Date: Sun, 18 Mar 2018 07:30:30 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/5.6.30 [root@localhost ~]# cat /usr/local/php-fpm/var/log/php_errors.log[object Object]
(路徑不正確)
[root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
[root@localhost ~]# /etc/init.d/php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done [root@localhost ~]# !curl curl -x127.0.0.1:80 test.com/3.php -I HTTP/1.1 200 OK Server: nginx/1.12.2 Date: Sun, 18 Mar 2018 07:36:44 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/5.6.30
(可以訪問)
·配置進程管理參數:
·pm = dynamic //動態進程管理,也可以是static
·pm.max_children = 50 //最大子進程數,ps aux可以查看
·pm.start_servers = 20 //啟動服務時會啟動的進程數
·pm.min_spare_servers = 5 //定義在空閑時段,子進程數的最少數量,如果達到這個數值時,php-fpm服務會自動派生新的子進程。
·pm.max_spare_servers = 35 //定義在空閑時段,子進程數的最大值,如果高於這個數值就開始清理空閑的子進程。
·pm.max_requests = 500 //定義一個子進程最多處理的請求數,也就是說在一個php-fpm的子進程最多可以處理這麽多請求,當達到這個數值時,它會自動退出
[root@localhost ~]# cat /usr/local/php-fpm/etc/php-fpm.d/www.conf
pm=dynamic 動態,一開始先啟動20個,之後根據需求去生成或者銷毀子進程
如果把dynamic改為static靜態,那麽紅框中配置將不再生效,啟動直接生成50個進程
[root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
[root@localhost ~]# /etc/init.d/php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done [root@localhost ~]# ps aux|grep php-fpm
(www這個pool有50個進程)
如有錯誤,歡迎指正,互相學習,共同進步!!!
2018-3-19 13周1次課 php-fpm的pool、慢日誌、進程、open_basedir