• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • PHP超時處理全面總結

    發表于:2013-10-28來源:酷勤網作者:不詳點擊數: 標簽:php
    在PHP開發中工作里非常多使用到超時處理到超時的場合,我說幾個場景: 1. 異步獲取數據如果某個后端數據源獲取不成功則跳過,不影響整個頁面展現 2. 為了保證Web服務器不會因為當個頁面處理性能差而導致無法訪問其他頁面,則會對某些頁面操作設

      【 概述 】

      在PHP開發中工作里非常多使用到超時處理到超時的場合,我說幾個場景:

      1. 異步獲取數據如果某個后端數據源獲取不成功則跳過,不影響整個頁面展現

      2. 為了保證Web服務器不會因為當個頁面處理性能差而導致無法訪問其他頁面,則會對某些頁面操作設置

      3. 對于某些上傳或者不確定處理時間的場合,則需要對整個流程中所有超時設置為無限,否則任何一個環節設置不當,都會導致莫名執行中斷

      4. 多個后端模塊(MySQL、Memcached、HTTP接口),為了防止單個接口性能太差,導致整個前面獲取數據太緩慢,影響頁面打開速度,引起雪崩

      5. 。。。很多需要超時的場合

      這些地方都需要考慮超時的設定,但是PHP中的超時都是分門別類,各個處理方式和策略都不同,為了系統的描述,我總結了PHP中常用的超時處理的總結。

      【Web服務器超時處理】

      [ Apache ]

      一般在性能很高的情況下,缺省所有超時配置都是30秒,但是在上傳文件,或者網絡速度很慢的情況下,那么可能觸發超時操作。

      目前apachefastcgiphp-fpm模式下有三個超時設置:

      fastcgi超時設置:

      修改httpd.conf的fastcgi連接配置,類似如下:

    <IfModulemod_fastcgi.c>

    FastCgiExternalServer/home/forum/apache/apache_php/cgi-bin/php-cgi-socket/home/forum/php5/etc/php-fpm.sock

    ScriptAlias/fcgi-bin/"/home/forum/apache/apache_php/cgi-bin/"

    AddHandlerphp-fastcgi.php

    Actionphp-fastcgi/fcgi-bin/php-cgi

    AddTypeapplication/x-httpd-php.php

    </IfModule>

      缺省配置是30s,如果需要定制自己的配置,需要修改配置,比如修改為100秒:(修改后重啟apache):

    <IfModulemod_fastcgi.c>

    FastCgiExternalServer/home/forum/apache/apache_php/cgi-bin/php-cgi-socket/home/forum/php5/etc/php-fpm.sock-idle-timeout100

    ScriptAlias/fcgi-bin/"/home/forum/apache/apache_php/cgi-bin/"

    AddHandlerphp-fastcgi.php

    Actionphp-fastcgi/fcgi-bin/php-cgi

    AddTypeapplication/x-httpd-php.php

    </IfModule>

      如果超時會返回500錯誤,斷開跟后端php服務的連接,同時記錄一條apache錯誤日志:

      [ThuJan2718:30:152011][error][client10.81.41.110]FastCGI:commwithserver"/home/forum/apache/apache_php/cgi-bin/php-cgi"aborted:idletimeout(30sec)

      [ThuJan2718:30:152011][error][client10.81.41.110]FastCGI:incompleteheaders(0bytes)receivedfromserver"/home/forum/apache/apache_php/cgi-bin/php-cgi"

      其他fastcgi配置參數說明:

    IdleTimeout發呆時限

    ProcessLifeTime一個進程的最長生命周期,過期之后無條件kill

    MaxProcessCount最大進程個數

    DefaultMinClassProcessCount每個程序啟動的最小進程個數

    DefaultMaxClassProcessCount每個程序啟動的最大進程個數

    IPCConnectTimeout程序響應超時時間

    IPCCommTimeout與程序通訊的最長時間,上面的錯誤有可能就是這個值設置過小造成的

    MaxRequestsPerProcess每個進程最多完成處理個數,達成后自殺

      [ Lighttpd ]

      配置:lighttpd.conf

      Lighttpd配置中,關于超時的參數有如下幾個(篇幅考慮,只寫讀超時,寫超時參數同理):

      主要涉及選項:

      server.max-keep-alive-idle=5

      server.max-read-idle=60

      server.read-timeout=0

      server.max-connection-idle=360

    --------------------------------------------------

    #每次keep-alive的最大請求數,默認值是16

    server.max-keep-alive-requests=100

    #keep-alive的最長等待時間,單位是秒,默認值是5

    server.max-keep-alive-idle=1200

    #lighttpd的work子進程數,默認值是0,單進程運行

    server.max-worker=2

    #限制用戶在發送請求的過程中,最大的中間停頓時間(單位是秒),

    #如果用戶在發送請求的過程中(沒發完請求),中間停頓的時間太長,lighttpd會主動斷開連接

    #默認值是60(秒)

    server.max-read-idle=1200

    #限制用戶在接收應答的過程中,最大的中間停頓時間(單位是秒),

    #如果用戶在接收應答的過程中(沒接完),中間停頓的時間太長,lighttpd會主動斷開連接

    #默認值是360(秒)

    server.max-write-idle=12000

    #讀客戶端請求的超時限制,單位是秒,配為0表示不作限制

    #設置小于max-read-idle時,read-timeout生效

    server.read-timeout=0

    #寫應答頁面給客戶端的超時限制,單位是秒,配為0表示不作限制

    #設置小于max-write-idle時,write-timeout生效

    server.write-timeout=0

    #請求的處理時間上限,如果用了mod_proxy_core,那就是和后端的交互時間限制,單位是秒

    server.max-connection-idle=1200

    --------------------------------------------------

    原文轉自:http://www.kuqin.com/web/20120808/324135.html

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>