配置注意事项_php技巧_脚本之家

1、php-fpm 配置文件里 rlimit_files的值 要与系统的打开连接数一致

php日志中有一条超时的日志,但是我request_terminate_timeout中设置的是0,理论上应该没有超时时间才对。

1)查看系统文件打开连接数

PHP Fatal error: Maximum execution time of 30 seconds exceeded in …

[root@iZ94eveq0q4Z ~]# ulimit -n65535

OK,先列出现在的配置:

2)查看一下php-fpm 配置文件里 rlimit_files的值

php-fpm:request_terminate_timeout = 0php.ini:max_execution_time = 30

; Set open file descriptor rlimit#rlimit设置打开的文件描述符; Default
Value: system defined valuerlimit_files =
65535如果两个值不一样,则要设置为一样

先查阅了一下php-fpm文件中关于request_terminate_timeout的注释

3)设置系统打开文件连接数

; 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, m, or d;
Default Value: 0

[root@hotdata ~]# ulimit -HSn 65535[root@hotdata ~]# ulimit
-n65535[root@hotdata ~]#

这个注释说明了,request_terminate_timeout
适用于,当max_execution_time由于某种原因无法终止脚本的时候,会把这个php-fpm请求干掉。

设置好后重启php-fpm服务

再看看max_execution_time的注释:这设置了脚本被解析器中止之前允许的最大执行时间,默认是30s。看样子,我这个请求应该是被max_execution_time这个设置干掉了。

2、 request_terminate_timeout = 0 设置为0

好吧,不死心,做了一个实验:

; 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, m, or d;
Default Value: 0request_terminate_timeout = 0

php-fpm request_terminate_timeout 设置 0 15
php.inimax_execution_time 设置 30 30 执行结果 php有Fatal
error超时日志,http状态码为500 php无Fatal
error超时日志,http状态码为502,php-fpm日志中有杀掉子进程日志

因为这个参数会直接杀掉php进程,然后重启php进程,这样前端nginx就会返回104:
Connection reset by peer。这个过程是很慢,总体感觉就是网站很卡

好吧,结论是web请求php执行时间受到2方面控制,一个是php.ini的max_execution_time(要注意的是sleep,http请求等待响应的时间是不算的,这里算的是真正的执行时间),另一个是php-fpm
request_terminate_timeout 设置,这个算的是请求开始n秒。

发表评论

电子邮件地址不会被公开。 必填项已用*标注