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