php 500 無輸出 不報錯 請問如何快速定位錯誤碼。
無輸出,無報錯,日誌正常。
我在重新表述下吧(一道中進階面試題):
線上代碼,無輸出,無報錯,日誌正常,LNMP SERVER 500錯誤請問如何快速定位錯誤碼。
回複內容:
php 500 無輸出 不報錯 請問如何快速定位錯誤碼。
無輸出,無報錯,日誌正常。
我在重新表述下吧(一道中進階面試題):
線上代碼,無輸出,無報錯,日誌正常,LNMP SERVER 500錯誤請問如何快速定位錯誤碼。
萬能代碼:
register_shutdown_function(function(){ var_dump(error_get_last()); });
不過樓主還是要學會查看錯誤記錄檔。
原來是個面試題。。。。
是否有日誌;
錯誤發生的現象:指定人發生還是所有請求都會,是以前就會還是第一次出現,伺服器尤其是資料庫伺服器負載程度,錯誤是否可以重現;
最近是否發布代碼,是否改動了線上的基礎設施;
以前是否有類似事件發生;
500 是伺服器內部錯誤,可以關注下php-fpm是否沒有響應,php-fpm進程是否正常。其次看一下相關代碼:是否依賴外部請求,是否有檔案名稱大小寫拼字錯誤問題,是否有效能低下的資料庫查詢,是否有邏輯處理不當的地方;
最後,修複問題後,完善日誌資訊,不要告訴我沒有日誌,這事必須有日誌。還有檢查測試過程是否完整是否需要完善,避免下次又團團轉。
安裝xdebug擴充,然後看你的錯誤記錄檔。
可以精確定位到出錯的地方,以及引用等資訊,強烈推薦。
根據我的經驗,Windows用一些整合化環境的話,像記憶體溢出等錯誤,錯誤記錄檔是不會顯示錯誤資訊的。(像Chrome瀏覽器會直接告訴你HTTP 500,而不是錯誤資訊或者白屏)
查看伺服器錯誤日誌
開發的話 修改服務的配置,直接顯示錯誤啊
ini_set('display_errors','On');
看php錯誤記錄檔,立馬定位問題
strace -p pid
strace常用來跟蹤進程執行時的系統調用和所接收的訊號。 在Linux世界,進程不能直接存取硬體裝置,當進程需要訪問硬體裝置(比如讀取磁碟檔案,接收網路資料等等)時,必須由使用者態模式切換至核心態模式,通 過系統調用訪問硬體裝置。strace可以跟蹤到一個進程產生的系統調用,包括參數,傳回值,執行消耗的時間。
pstack
命令可顯示每個進程的棧跟蹤。pstack 命令必須由相應進程的屬主或 root 運行。可以使用 pstack 來確定進程掛起的位置。此命令允許使用的唯一選項是要檢查的進程的 PID。