對於PHP-FPM參數的理解

王林
發布: 2023-04-07 07:54:02
轉載
1580 人瀏覽過

process_control_timeout

英文解釋

process_control_timeout mixedTime limit for child processes to wait for a reaction on signals from master.
Available units: s(econds), m(inutes), h(ours), or d(ays) Default Unit: seconds. Default value: 0.
登入後複製

中文解釋

process_control_timeout
 mixed
设置子进程接受主进程复用信号的超时时间。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。
登入後複製

中文翻譯有個不恰當的地方,英文解釋裡並沒有指明該信號是複用信號。

我的理解:

處理請求

#原則上,php-fpm會選擇空閒的fastcgi處理請求,在處理之前,php-fpm會傳送訊號,用來讓fastcgi程序準備好接受請求處理。但是fastcgi進程並不總是能夠處理請求,也就是不能總是回應該訊號(例如出現假死的情況),這時候就需要設定php-fpm留給fastcgi進程回應訊號的時間,如果逾時了,php -fpm會想其他辦法(例如選擇其他fastcgi進程),這個就process_control_timeout參數的作用。

php-fpm進行reload

#process_control_timeout = 10

登入後複製

當瀏覽器存取http://localhost時,進行php-fpm平滑reload#,fastcgi訊號收到關閉進程訊號後,第一個sleep函數會直接傳回,但是第二個sleep仍在執行。因此,php-fpm會被這一個舊fastcgi進程卡10s,超過後才能完成平滑重啟

#request_terminate_timeout

##在

php-fpm.conf檔案中的描述如下:

; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the 'max_execution_time' ini option
; does not stop script execution for some reason. A value of '0' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
;request_terminate_timeout = 0
登入後複製

翻譯過來就是:


request_terminate_timeout參數設定了處理單一請求的逾時時間,過了之後,該worker進程就會被kill掉。這個選項應該在php.ini檔案的max_execution_time選項因為某些原因沒有停止腳本的執行下使用。預設值為0,表示該選項為關閉狀態。

如同上面所說,

request_terminate_timeout設定的是請求的逾時時間,而php.ini配置中的max_execution_time根據手冊如下的解釋,是腳本被允許的最大執行時間。

max_execution_time
 integer
这设置了脚本被解析器中止之前允许的最大执行时间,单位秒。 这有助于防止写得不好的脚本占尽服务器资源。 默认设置为 30。 从命令行运行 PHP 时,默认设置为 0。
最大执行时间不会影响系统调用和系统操作等。更多细节参见 set_time_limit()。
在 安全模式 下你不能通过 ini_set() 来修改此设置。 唯一的解决方法是关闭安全模式或者在 php.ini中修改时间限制。
你的 web 服务器也可以有其他超时设置,也有可能中断 PHP 的执行。 Apache 有一个 Timeout 指令,IIS 有一个 CGI 超时功能。 他们默认都是 300 秒。更多具体信息参见你的 web 服务器的文档。
登入後複製

差異如下:

逾時後,

request_terminate_timeout會回傳502Bad Gateway了,而max_execution_time會拋出Fatal Error

max_execution_time不包括諸如使用

system()sleep()的系統呼叫、流操作、資料庫操作等的時間,所以比較雞肋,而request_terminate_timeout會包含程序的完整請求時間。

另外,開啟request_terminate_timeout並不會讓max_execution_time失效,先到達誰的逾時時間誰運作。

更相關PHP問題請上PHP中文網:

//m.sbmmt.com/

以上是對於PHP-FPM參數的理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
fpm
來源:PHPStudy
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!