一.php-fpm 進程設置php
php-fpm進程池開啓進程有兩種方式,一種是static,直接開啓指定數量的php-fpm進程,再也不增長或者減小;
另外一種則是dynamic,開始時開啓必定數量的php-fpm進程,當請求量變大時,動態的增長php-fpm進程數到上限,當空閒時自動釋放空閒的進程數到一個下限。html
動態適合小內存機器,靈活分配進程,省內存。靜態適用於大內存機器,動態建立回收進程對服務器資源也是一種消耗linux
幾個參數設置:數據庫
pm = dynamic //pm參數指定了進程管理方式,有兩種可供選擇:static或dynamic,從字面意思不難理解,爲靜態或動態方式 pm.max_children = 100 //static模式下建立的子進程數或dynamic模式下同一時刻容許最大的php-fpm子進程數量,pm.max_spare_servers的值只能小於等於pm.max_children pm.start_servers = 3 //動態方式下的起始php-fpm進程數量 pm.min_spare_servers = 1 //動態方式下服務器空閒時最小php-fpm進程數量 pm.max_spare_servers = 5 //動態方式下服務器空閒時最大php-fpm進程數量
參數設置建議:通常php-fpm進程佔用20~30m左右的內存就按30m算。若是單獨跑php-fpm,動態方式起始值可設置物理內存Mem/30M,因爲你們通常Nginx、MySQL都在一臺機器上,因而預留一半給它們,即php-fpm進程數爲$Mem/2/30。服務器
二.超時時間設置 max_execution_time(php.ini) 與 request_terminate_timeout(php-fpm)函數
php腳本超時時間能夠在php.ini的max_execution_time
和fpm.conf的request_terminate_timeout
參數兩處進行設置.那麼這二者有什麼區別呢?php-fpm
當咱們設置php.ini的max_execution_time參數後,zend引擎處理腳本時,其內部會根據設定的時間定義一個定時器(setitimer),這是linux的API。spa
而fpm.confrequest_terminate_timeout的檢測是經過主進程遍歷定時事件fpm_pctl_heartbeat來判斷PHP腳本執行是否超時。
.net
這個值限定了腳本的最大執行時間(單位是秒) 日誌
set_time_limit()
函數和配置指令max_execution_time
隻影響腳本自己執行的時間。任何發生在諸如使用system()的系統調用,流操做,數據庫操做等的腳本執行的最大時間不包括其中,當該腳本已運行。在測量時間是實值的Windows中,狀況就不是如此了。
設置單個請求的超時停止時間。該選項可能會對 php.ini 設置中的 max_execution_time
由於某些特殊緣由沒有停止運行的腳本有用。設置爲 ‘0’ 表示 ‘Off’。可用單位:s(秒),m(分),h(小時)或者 d(天)。默認單位:s(秒)。默認值:0(關閉)。
經過上面兩個說明及實驗驗證得出結論,max_execution_time=1,不必定1s後就會停止腳本,多是2s、3s甚至更長的時間;而request_terminate_timeout=4則就會在4s後停止腳本的執行。因此在配置超時時間的時候,最好兩個都配置,max_execution_time時間短一點,而request_terminate_timeout時間長一點
三.開啓慢日誌
開啓慢日誌的目的是爲了跟蹤分析那條php腳本執行的時間超過了設置的request_slowlog_timeout時長,若是超過這個設置時間,那麼該腳本就會被記錄下
slowlog = log/$pool.log.slow
request_slowlog_timeout = 2
開啓php-fpm的慢日誌,時間閥值2秒;
四.php-fpm啓動、重啓、終止
PHP5.3.3後的php-fpm 再也不支持php-fpm 之前具備的 /usr/local/php/sbin/php-fpm(start|stop|reload)等命令,須要使用信號控制:
master進程能夠理解如下信號
INT, TERM 馬上終止 ;
QUIT 平滑終止 ;
USR1 從新打開日誌文件 ;
USR2平滑重載全部worker進程並從新載入配置和二進制模塊 ;
先查看php-fpm的master進程號
ps aux|grep php-fpm
重啓php-fpm:
# kill -USR2 1392
上面方案通常是沒有生成php-fpm.pid文件時使用,若是要生成php-fpm.pid,使用下面這種方案:
上面master進程能夠看到,matster使用的是/usr/local/php/etc/php-fpm.conf這個配置文件,cat /usr/local/php/etc/php-fpm.conf 發現:
[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
;pid = run/php-fpm.pid
pid文件路徑應該位於/usr/local/php/var/run/php-fpm.pid,因爲註釋掉,因此沒有生成,咱們把註釋去除,再kill -USR2 42891 重啓php-fpm,便會生成pid文件,下次就能夠使用如下命令重啓,關閉php-fpm了:
php-fpm 關閉:
kill -INT 'cat /usr/local/php/var/run/php-fpm.pid'
php-fpm 重啓:
kill -USR2 'cat /usr/local/php/var/run/php-fpm.pid'
參考:
https://www.zybuluo.com/phper/note/89081
http://blog.itpub.net/14184018/viewspace-1797411/
https://www.cnblogs.com/kenshinobiy/p/7470635.html
https://blog.csdn.net/wzx19840423/article/details/79071928
https://blog.csdn.net/mijar2016/article/details/53709777