參考:
青銅 var_dump/die列印變數值資訊單步除錯
是最簡單粗暴有效的解決問題方法。高階一點的是使用列印日誌。
** 會設定各種錯誤日誌的記錄和顯示,並根據各種錯誤日誌分析錯誤或者搜尋別人的解決方案
php.ini 設定錯誤記錄
display_errors = onphp-fpm.conf 設定錯誤日誌記錄並記錄慢日誌error_reporting = e_all | e_strict
error_log = /data/wwwlogs/php_errors.log
display_startup_errors = on
log_errors = on
error_log = /data/wwwlogs/php-fpm.error.lognginx 設定錯誤日誌記錄log_level = warning
request_slowlog_timeout = 1
slowlog = /data/wwwlogs/php-fpm.slow.log
error_log /data/wwwlogs/error_nginx.log crit;檢視linux系統日誌
tail -f /var/log/messages能熟練根據各種錯誤日誌排查問題,基本已經可以解決大部分的異常問題。
鉑金 存在多個版本的php或php-cli與php-fpm載入不同的配置
存在多個版本的php,懂得通過which php來看是哪個php。
當php-cli與php-fpm得到的執**況不一樣,php-cli下可以通過php -i |grep php.ini看載入了哪個php.ini。
fpm下通過phpinfo()函式可以看載入了哪個php.ini。
鑽石 使用strace/tcpdump工具跟蹤程式或抓包
strace可以用來檢視系統呼叫的執行,使用strace php test.php,或者strace -p 程序id。strace就可以幫助你透過現象看本質,掌握程式執行的過程。這個手段是在大型**,大公司裡最常用的。如果當然strace對於php **裡的死迴圈是解決不了的。比如你發現乙個php-fpm程序cpu100%了,strace恐怕是解決不了的。因為strace是看系統呼叫,一般都 是io類操作,既然是io密集,那cpu一定不可能是100%。
tcpdump可以抓到網絡卡的資料通訊過程,甚至資料內容也可以抓到。使用tcpdump可以看到網路通訊過程是什麼樣的,如何時發起了tcp syn3次握手,何時傳送fin包,何時傳送rst包。這是乙個基本功,如果不懂tcpdump,證明不具備網路問題解決能力。
星耀 統計函式呼叫的耗時和成功率,分析系統慢的主要原因
使用xhporf/xdebug匯出php請求的呼叫過程,然後分析每個函式呼叫的過程和耗時。能夠分析php程式的效能瓶頸,找出可以優化的點。
另外乙個對於網路服務的呼叫,如mysql查詢,curl,其他api呼叫等,通過記錄起始和結束時microtime,返回的是不是false, 可以得到呼叫是否成功,耗時多少。
通過nginx access.log 找到返回慢的主要介面:
查詢介面響應時間大於1秒的請求數量
grep user_msg.php access.log |grep post |awk -f'up_resp_time' '' |awk -f'\"' '$3>1'|wc -l通過php-fpm.slow.log 檢視介面什麼地方呼叫比較慢:
查詢慢的函式呼叫比例:
grep -e 'script_filename.*user_msg' -a 3 php-fpm.slow.log | awk '' |grep -v = |sort |uniq -c王者 gdb使用
gdb是c/c++除錯程式的利器,需要具備一定c/c++功底的程式設計師才會能熟練使用gdb。上面說的strace無法跟蹤php程式cpu100%,而gdb是可以跟蹤的。另外gdb也可以解決php程式core dump的問題。
關於PHP程式設計師解決問題的能力
這個話題老生長談了,在面試中必然考核的能力中,我個人認為解決問題能力是排第一位的,比學習能力優先順序更高。解決問題的能力既能看出程式設計師的思維能力,應變能力,探索能力等,又可以看出他的經驗。如果解決問題能力不佳是無法通過面試的。這裡舉個例子,假如我執行了乙個php的指令碼,如php test.ph...
關於PHP程式設計師解決問題的能力
假如我執行了乙個php的指令碼,如php test.php,預期是可以返回乙個字串。但執行後沒有任何資訊輸出,這時候通過什麼方法能知道程式錯在 這裡可以將解決問題能力分為8個等級,越到後面的表示能力越強。lv0 檢視php錯誤資訊 程式沒有達到預期效果,證明 出錯了,看php的錯誤資訊是第一步。如果...
關於PHP程式設計師解決問題的能力
這個話題老生長談了,在面試中必然考核的能力中,我個人認為解決問題能力是排第一位的,比學習能力優先順序更高。解決問題的能力既能看出程式設計師的思維能力,應變能力,探索能力等,又可以看出他的經驗。如果解決問題能力不佳是無法通過面試的。這裡舉個例子,假如我執行了乙個php的指令碼,如php test.ph...