隨機(不是全部)頁面上的 502 錯誤
幾週前,我在 Google 網站管理員工具中註意到我的一些 URL 正在返回 502。
一個這樣的 URL 是http://www.sau.com.au/forums/topic/437438-around-the-bay-wrap-up/
此 URL 為任何桌面皮膚返回 502,但在移動設備上工作正常(不同皮膚)
請注意,它會很快返回 502,這表明它不是執行或某種形式的超時。
除了幾個這樣的,網站上的所有其他 URL 都很好。
唯一有幫助的日誌條目就是這個;
2015/06/29 09:33:39
$$ error $$19650#0:* 4431763 上游過早關閉 FastCGI 標準輸出,同時從上游讀取響應標頭,客戶端:94.228.34.203,伺服器:sau.com.au,請求:“GET /forums/topic/437438-around-the-bay-wrap -up/ HTTP/1.1”,上游:“fastcgi://unix:/var/run/php-fpm/php-fpm.sock:”,主機:“www.sau.com.au”,引用者:“ http ://www.sau.com.au/forums/forum/100-victoria/ “
我還重新啟動了 APC,但沒有幫助。它只有 1.5% 的碎片。
我找不到任何達到限制的條目。伺服器的規格很高,因此 PHP 有很多記憶體、請求大小和很長的超時時間。
我嘗試了以下我閱讀但沒有差異的內容。
fastcgi_buffer_size 10240k; fastcgi_buffers 4 10240k;
我不願意做任何大的改變,因為這只是在某些頁面上。一個執行緒建議將 PHP 更新到 5.5。
我不知道現在該去哪裡尋求進一步的幫助。我的下一步應該是什麼?
一些資訊;
nginx version: nginx/1.6.2 PHP 5.3.3 (fpm-fcgi) (built: Oct 30 2014 20:14:56)
更新 1
PHP 錯誤日誌沒有寫入任何內容。雖然啟用了錯誤日誌記錄;
php_admin_value[error_log] = /var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on
更新 2
dmesg 似乎沒有更新,也沒有 kernel.log;
-rw-r--r-- 1 root root 41179 Dec 18 2014 dmesg
解決
我在這個答案中按照@sa289 的建議安裝了 XDebug,為此我需要從 PHP 5.3 更新到 PHP 5.5。我希望這會自行解決問題,但事實並非如此。所以,我安裝了 XDebug 並將 zend_extension 添加到 php.ini,重新啟動 PHP,瞧,502 不見了。我再次註釋掉了 zend 擴展並且 502 的返回。XDebug 來救援。沒有牢牢把握原因或真正的解決方案,但這對我來說已經足夠了。
我會通過使用 Xdebug 查看它可能在哪裡崩潰。Xdebug 可用於執行稱為跟踪的操作,它會告訴您執行的每一行程式碼,這樣您就可以看到崩潰前執行的最後一行程式碼,從而為您指明正確的方向。您可以讓它僅在設置了某個 cookie 時進行跟踪,這樣您就不會為每個請求生成跟踪日誌。特別檢查以下配置設置:
xdebug.trace_enable_trigger
xdebug.trace_output_dir
xdebug.collect_params
xdebug.trace_output_name
(我喜歡“trace.%p.%t”,因為它將 PID 放在文件名中,這在某些情況下會有所幫助)有關這些配置參數以及其他參數的詳細資訊,請參閱http://xdebug.org/docs/all_settings 。