zoukankan      html  css  js  c++  java
  • php长时间的脚本,报502

    php-fpm超时时间设置request_terminate_timeout分析
    原创loophome 最后发布于2017-11-22 16:17:59 阅读数 21201 收藏
    展开
    今天发现了一个很神奇的事情,php日志中有一条超时的日志,但是我request_terminate_timeout中设置的是0,理论上应该没有超时时间才对。

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

    OK,先列出现在的配置:

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

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

    ; 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 适用于,当max_execution_time由于某种原因无法终止脚本的时候,会把这个php-fpm请求干掉。
    再看看max_execution_time的注释:这设置了脚本被解析器中止之前允许的最大执行时间,默认是30s。看样子,我这个请求应该是被max_execution_time这个设置干掉了。

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

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

    好吧,结论是web请求php执行时间受到2方面控制,一个是php.ini的max_execution_time(要注意的是sleep,http请求等待响应的时间是不算的,这里算的是真正的执行时间),另一个是php-fpm request_terminate_timeout 设置,这个算的是请求开始n秒。
    ————————————————
    版权声明:本文为CSDN博主「loophome」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/loophome/article/details/78604986

  • 相关阅读:
    uip源码剖析【一】——【网络层】ARP解读
    MySql字符编码详解
    51单片机+uip实战
    dos中如何查找一个字符串是否包含在某个文件中,如果有则将该文件名输出
    Full TCP/IP for 8Bit Architectures 阅读
    个人PKM之路
    Overlooked Essentials For Optimizing Code
    Would it be faster to batch SetVertex/PixelShaderConstant calls?
    2D Skinned Mesh(3D的完全翻版 带旋转)
    The difference between d8&d9's constants def in asm shaders
  • 原文地址:https://www.cnblogs.com/php-linux/p/12597544.html
Copyright © 2011-2022 走看看