>백엔드 개발 >PHP 튜토리얼 >PHP-FPM 매개변수 이해

PHP-FPM 매개변수 이해

王林
王林앞으로
2019-08-21 10:01:331778검색

process_control_timeoutprocess_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进程准备好接受请求处理。但是fastcgi进程并不总是能够处理请求,也就是不能总是响应该信号(比如出现假死的情况),这时候就需要设定php-fpm留给fastcgi进程响应信号的时间,如果超时了,php-fpm会想其他办法(例如选择其他fastcgi进程),这个就process_control_timeout参数的作用。

php-fpm进行reload

process_control_timeout = 10

<?php 
sleep(50);echo 1;sleep(20);    
//没有这个sleep,reload会立即生效echo 2;

当浏览器访问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 &#39;max_execution_time&#39; ini option
; does not stop script execution for some reason. A value of &#39;0&#39; means &#39;off&#39;.
; 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()

영어 설명

rrreee

중국어 설명

rrreee중국어 번역에서 부적절한 부분이 있습니다. 영어 설명에서는 신호가 다중화된 신호임을 ​​나타내지 않습니다.

내가 이해한 바: 🎜🎜요청 처리🎜🎜원칙적으로 php-fpm은 요청을 처리하기 전에 유휴 fastcgi 프로세스를 선택합니다. 요청 처리를 수락하기 위해 fastcgi 프로세스를 준비하기 위해 fastcgi에 신호를 보냅니다. 그러나 fastcgi 프로세스는 항상 요청을 처리할 수 있는 것은 아닙니다. 즉, 신호(예: 정지된 애니메이션)에 항상 응답할 수는 없습니다. 이때 php-fpm이 fastcgi 프로세스를 위해 남겨두는 시간을 설정해야 합니다. 시간이 초과되면 php -fpm은 다른 방법(예: 다른 fastcgi 프로세스 선택)을 생각할 것입니다. 이것이 process_control_timeout 매개변수의 역할입니다. 🎜🎜php-fpm다시 로드를 수행합니다🎜🎜process_control_timeout = 10🎜rrreee🎜브라우저가 http://localhost에 액세스할 때 code>에서 <code>php-fpm 스무딩 reload를 수행합니다. fastcgi 신호가 종료 프로세스 신호를 수신한 후 첫 번째 절전 기능이 직접 반환되지만 두 번째 절전 모드는 여전히 그대로 유지됩니다. 구현하다. 따라서 php-fpm은 이 오래된 fastcgi 프로세스에 의해 10초 동안 정지됩니다. 그 후에는 원활한 재시작을 완료할 수 있습니다🎜🎜request_terminate_timeout🎜🎜php-fpm.conf 파일 다음과 같습니다. 🎜rrreee🎜번역은 다음과 같습니다.<br><code>request_terminate_timeout 매개변수는 단일 요청 처리에 대한 시간 제한을 설정합니다. 그 후에는 작업자 프로세스가 종료됩니다. 이 옵션은 php.ini 파일의 max_execution_time 옵션이 어떤 이유로든 스크립트 실행을 중지하지 않는 경우 사용해야 합니다. 기본값은 0이며, 이는 이 옵션이 꺼져 있음을 의미합니다. 🎜🎜위에서 언급한 것처럼 request_terminate_timeout은 요청의 시간 제한을 설정하며, php.ini 구성의 max_execution_time은 매뉴얼 최대 실행의 다음 설명에 따라 스크립트에 허용됩니다. 시간. 🎜rrreee🎜차이점은 다음과 같습니다. 🎜🎜시간 초과 후 request_terminate_timeout은 502Bad Gateway를 반환하고 max_execution_time치명적인 오류를 발생시킵니다. . 🎜🎜max_execution_time에는 <code>system(), sleep()을 사용하는 시스템 호출, 스트림 작업, 데이터베이스 작업 등의 시간이 포함되지 않으므로 더 쓸모가 없습니다. , request_terminate_timeout에는 프로그램 전체 요청 시간이 포함됩니다. 🎜🎜또한 request_terminate_timeout을 켜도 max_execution_time이 무효화되지는 않습니다. 시간 초과에 먼저 도달한 사람이 적용됩니다. 🎜🎜PHP 관련 더 많은 문제를 보려면 PHP 중국어 웹사이트를 방문하세요: 🎜https://www.php.cn/🎜🎜

위 내용은 PHP-FPM 매개변수 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 PHPStudy에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제