回覆列表
  • 1 # 波羅學

    你的問題太模糊了。我先從常見的錯誤說,然後再從相對從大的方面來描述。

    程序掛掉可能是什麼原因?

    一方面是程式可能有邏輯錯誤,導致了諸如下標越界,資料異常等問題。

    另一方面,可能是系統原因,比如程式碼質量一般,系統資源消耗厲害,程序退出。

    還有可能是上下游服務問題,比如 MySQL 等服務異常,上游 API 異常,配置錯誤。

    簡單說了下各種可能的異常,但對一個專案而言,天下問題千千萬,不可能有一條完美的準則。

    遇到問題,通常要從幾步出發,從排查出錯原因、尋找解決方案和如何預防出發。

    排查錯誤的原因,這是最重要的一步,只有對症下藥才能解決問題。

    首先確認下是否容易復現的問題,容易復現的話,通常會給出錯誤資訊。然後,我們只要在開發時除錯下就好了,常見的除錯方法有 print 列印來觀察問題,或者是使用一些 debug 除錯工具,我相信你會用。print 的特點是簡單好用,但每次都有修改程式碼,比較繁瑣。而除錯工具就比較方便,看的資訊會比較全,一些 IDE 都集成了除錯工具。

    對於不容易復現的問題,可以透過記錄日誌的方式排查。有人會說,記錄日誌是資源消耗,曾經我也怎麼想過。但對於現在的硬體配置而已,記錄日誌的成本是非常小的,一個好像的專案肯定是整合日誌的,不然就太 low 逼了,我可不敢用。

    尋找解決方案,這一步需要基於前面診斷出的結果進行排查。

    一個簡單的案例。比如,提示 MySQL 連線數過多,什麼情況可能導致這個問題?是 MySQL 配置的連線數本身就很少,還是程式設計不合理導致連線無法正確複用,亦或是業務量真的大了,當前最大連線數無法承受呢。每種情況的處理方式都不同。

    如何預防問題,我主要想學詳細的日誌,和增加一些恢復機制。

    詳細的日誌就不說了,異常要記得捕獲,並且記錄發生異常的原因,這一步對排查問題非常有幫助。

    另外,不是所有的異常都應該立刻退出程序,如果不是一些非常嚴重的錯誤,透過日誌提示下,程式還可以繼續工作。不過,有些異常還是要做一些修復處理,比如資料庫連線斷開,可嘗試重新連線,上游系統服務異常,可以執行多次呼叫,而不是直接退出。

  • 中秋節和大豐收的關聯?
  • CNC精雕機機床什麼特色?