多數的錯誤表現看起來莫明奇妙,甚至難以想象java
但當咱們找到問題後會發現:其實問題的根源是如此簡單、如此的合乎道理。nginx
這就要求咱們:api
一、保持一種淡定的心態,耐心地來查找問題curl
二、仔細看日誌:工具
url
三、善於分析關鍵字spa
大部分的錯誤互聯網上是有解決方案的,但由於搜索關鍵字的選擇錯誤,致使這些解決方案不被咱們看到。翻譯
必定要善於在錯誤日誌種分析出關鍵的那幾個「錯誤字眼」調試
四、相信谷歌比百度更容易找到答案日誌
程序系統,就像一張複雜的電路網,程序的調用、數據傳遞過程,就像電流在電路流轉。
當這張網出問題時,我麼順着鏈路一點點的查找,總能找到問題點根源。
咱們拿一個簡單的鏈路來舉例:
假設如今燈泡不亮了,面臨這樣一個鏈路,在沒有任何調試數據時,咱們能夠說整個鏈路均可能是有問題的:
(用紅色表示有問題的鏈路)
那麼咱們調試的方案以下:
一、從起點開始:調試是否有電?
把正負極鏈接一個沒有問題的燈泡(綠色表示肯定沒問題):
首先咱們得找一個沒有問題的燈泡來調試,若是這時還不亮,那說明電源有問題。
二、若是電源沒問題,咱們再調試A點:
依次如上調試,最終咱們確定能肯定問題根源。
咱們把電路更換爲程序鏈路來看一下:
同理,從入口調試開始,先調試Nginx有無問題:
一樣地,咱們須要先創建一個「確信點」,就像那個「沒問題的燈泡」,對於nginx來說,咱們能夠創建一個最簡單的server來調試:
若是肯定nginx沒問題,咱們再依次確認A、B有無問題,有時模塊的調用沒法全鏈路調用調試,好比問題只發生在A掉B的時候,這時候curl,telnet就是咱們有力的工具了,這個時候細展開鏈路可能會是這樣子的:
咱們沒法確認是B服務有問題了,仍是k8s網路服務有問題了,此時咱們能夠在服務B中經過curl請求本身來確認:
curl http://localhost:8080/api/xxx
總之,鏈路大法的關鍵是要找一個「沒有問題的燈泡」去調試某個鏈路點,好比創建簡單的nginx server節點、curl、ping等等,
經過一個咱們確認沒有問題的方法,一個個去排查鏈路上的問題。
拋棄「我覺得、我以爲、我猜想」
即便是你認爲沒問題的鏈路點,也必定要親自調試,親眼見到才肯定
易族智匯(javashop)原創文章