Ubuntu
PHP 腳本超時,但正常頁面很流暢
我對 nginx 和 PHP-FPM 有一個奇怪的問題。我設置了一個伺服器來為我的網站提供下載服務。它不是很野獸,它只有 Celeron G530 和 4GB 的 RAM,因此,我正在執行 nginx,因為它的成本很低。伺服器通常以 30-40Mbps 的速度不斷傳輸,埠為 100Mbps。
問題是,當我通過 HTTP 從伺服器請求一些 PHP 腳本時,請求經常超時。我知道 nginx 的時間限制是 60 秒,並且我已經通過日誌驗證它達到了那個時間並關閉了連接。
我還在伺服器上執行Munin來監控事情,雖然這仍然是通過 HTTP,在同一台伺服器上和相同條件下,它非常快速且快速,頁面載入時間不超過 150 毫秒。
在我看來,問題出在 PHP-FPM 上是合乎邏輯的(據我所知 Munin 使用 Perl),但我該如何檢查呢?我可以做些什麼來深入研究問題並查看實際的瓶頸是什麼?
如果是 PHP-FPM,我能做些什麼來加快速度?它不佔用大量 CPU 或 RAM,並且設置為使用套接字連接,而不是使用 nginx 的 TCP 連接。
謝謝你的幫助。
您應該將慢速日誌記錄添加到您的 php-fpm 配置中:
request_slowlog_timeout = 10 slowlog = /var/log/php-fpm/slow.$pool.log
這將記錄所有花費超過 10 秒的請求,因此您可以看到哪些腳本不是“活潑”的。它提供了在達到慢速記錄時間限制時程式碼所在位置的完整堆棧跟踪。
您還可以設置 PHP-FPM 狀態頁面。將此添加到您的 PHP-FPM 池配置中:
pm.status_path = /www-status
並通過 nginx 將請求傳遞給 PHP-FPM
location ~ ^/(www-status)$ { include %mysite.root.directory%/conf/fastcgi.conf; fastcgi_pass unix:%phpfpm.socket%/php-fpm-www.sock; # or IP address # fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; allow 127.0.0.1; allow stats_collector.localdomain; allow watchdog.localdomain; deny all; }
然後訪問 yoursite.com/www-status?full 將為您提供每個 php-fpm 程序的大列印資訊,例如:
pool: www process manager: dynamic start time: 18/Mar/2013:20:17:21 +1100 start since: 243 accepted conn: 3 listen queue: 0 max listen queue: 0 listen queue len: 0 idle processes: 3 active processes: 1 total processes: 4 max active processes: 1 max children reached: 0 slow requests: 0 ************************ pid: 6233 state: Idle start time: 18/Mar/2013:20:17:21 +1100 start since: 243 requests: 1 request duration: 631 request method: GET request URI: /www-status content length: 0 user: - script: /documents/projects/intahwebz/intahwebz/basereality/www-status last request cpu: 0.00 last request memory: 262144