1. 程式人生 > >2018-3-19 13周1次課 php-fpm的pool、慢日誌、進程、open_basedir

2018-3-19 13周1次課 php-fpm的pool、慢日誌、進程、open_basedir

php-fpm

12.21 php-fpm的pool


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生效了





12.22 php-fpm慢執行日誌


目的:為了記錄網站訪問慢的原因,方便查找原因

·增加請求超時記錄的配置:

[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秒可以過濾掉很多不需要的信息。





12.23 open_basedir


[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

(可以訪問)





12.24 php-fpm進程管理



·配置進程管理參數:

·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