首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

PHP for 迴圈阻塞多請求?修正 lighttpd fastcgi max-procs 設定

     編輯:程式設計綜合問答

現象

PHP 腳本含 sleep(1) 迴圈,同時開啟多個瀏覽器分頁訪問,後續請求必須等待前一個完成才回應,呈現序列阻塞。

根本原因

lighttpd + PHP-FPM (FastCGI) 預設 max-procs = 1,僅啟動一個 PHP 進程處理所有請求,導致併發請求排隊。

解決方案

修改 lighttpd.conf

fastcgi.server = ( ".php" => ((
    "host" => "127.0.0.1",
    "port" => 9000,
    "max-procs" => 10,      <-- 關鍵:增加進程數
    "bin-environment" => (
        "PHP_FCGI_CHILDREN" => "10"
    )
)))

或調整 PHP-FPM pool 設定 (php-fpm.conf)

pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10

驗證方法

  1. 重啟 lighttpd / php-fpm。
  2. 同時開啟多個分頁請求該腳本,觀察是否並行輸出(每秒出現一行數字)。
  3. 使用 ps aux | grep php 確認多進程存在。

嵌入式 ARM 板額外注意

  • 記憶體有限,max-procs 不宜過大,建議 3~5 視 RAM 調整。
  • 若使用 ob_flush()/flush() 輸出,確認 lighttpd 未啟用 server.stream-response-body = 2 導致緩衝。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved