網路之謎:記一次失敗排查的故事

来源:https://www.cnblogs.com/guoxiaoyu/archive/2023/11/15/17811098.html
-Advertisement-
Play Games

本文討論了一次故障排查的過程,通過監控工具和分析信息,但最終沒有找到根本原因。文章強調了故障排查的複雜性和重要性,提醒保持冷靜和耐心,在團隊合作和知識共用的基礎上解決問題,並總結了從這次故障中學到的經驗和教訓。 ...


在這篇文章中,我們將詳細探討導致故障的可能原因以及解決方案,以便更好地理解故障排查的複雜性和艱巨性,尤其是當出現與本次故障表現相似的問題時。

故障的表現

首先,讓我們回顧一下故障的表現。在客戶端調用介面時,發現一直在轉圈等待,而伺服器端卻收到了請求併在返回結果給客戶端時報了一些錯誤,包括java.io.IOException: Broken pipe錯誤和Connection reset by peer錯誤。儘管整個查詢鏈路所需時間並不長,大約在2秒左右,但通過使用grafana監控工具,我們發現Nginx的連接數超過了平時的6倍以上。儘管我們已經仔細檢查了各個方面的原因,但仍未找到根本問題所在。但是,我們最終註意到重啟服務可以解決問題,因此我們將目標問題的範圍鎖定在伺服器端。

pinpoint錯誤請求數及其分佈

image

Nginx當時的連接數:當時是個很正常日子,並沒什麼活動

image

問題排查

然而,為什麼會出現這樣的問題呢?主要原因在於監控手段不足,甚至無法生成基本的Java dump文件。在排查過程中,我們只能看到現象而無法找到具體原因。通過pinpoint平臺(類似於skywalking),我們發現了三種基本錯誤。第一種是之前提到的java.io.IOException: Broken pipe,第二種是Connection reset by peer,第三種是伺服器訪問第三方伺服器時出現的connection timeout或refuse connection錯誤。雖然之前也發生過類似的問題,但都是偶爾出現,並沒有像這次一樣數量如此之多,占用了訪問量的1/10。因此,在出現問題時,我們沒有立即重啟,而是進行了仔細排查。然而,最終我們以失敗告終,只能依靠重啟來解決問題。如果你有任何想法,請在下方評論區留言。

首先,我們排除了一些問題,如資料庫查詢、中間鏈路的轉發、第三方伺服器的調用等,均未發現問題。儘管我們確實可以確定問題出在伺服器節點上,但具體原因仍然是個謎。

在繼續探索之前,讓我們先瞭解一下故障排查的一般步驟。首先,我們需要收集足夠的信息來瞭解故障的具體表現。這包括錯誤日誌、監控指標、性能數據等。在本次故障中,我們已經通過監控工具獲取了一些有用的信息。接下來,我們需要分析這些信息,併進行合理的假設和推斷。我們還可以嘗試在類似的環境中重現故障,以進一步觀察和分析。當我們找到可能的原因時,可以進行一系列的測試和驗證,以確定是否解決了問題。最後,我們需要記錄和總結我們的調查過程,以便於日後的參考和經驗積累。

在本次故障排查中,我們遇到了一些挑戰。首先是監控手段不足的問題,由於JDK版本的問題導致無法生成Java dump文件。這使得我們無法深入瞭解故障的具體原因。因此,我們建議在類似的情況下,提前準備好足夠的監控工具和技術手段,以便更好地進行故障排查。

另一個挑戰是故障的復現。由於問題並非每次都發生,我們無法簡單地通過重現來解決。在這種情況下,我們嘗試了在生產環境協調客戶獲取賬號,並確實復現了問題所在,最終確定了是某一個節點連接數飆高導致無法處理請求導致的,但是為什麼會某一個節點單獨飆高就不得而知。

最後,我們需要註意故障排查的方法和技巧。在排查過程中,我們應該保持冷靜和耐心,避免盲目猜測和隨意嘗試。我們應該以科學的態度,根據收集的信息進行分析和推理,不斷迭代和驗證。同時,我們還應該註重團隊合作和知識共用,通過不同的視角和經驗來解決問題。

總結

總之,本次故障排查雖然以失敗告終,但我們從中學到了很多經驗和教訓。故障排查是一項複雜而重要的任務,需要我們具備專業知識和技術手段。同時,我們還需要保持冷靜和耐心,以科學的態度進行分析和推理。只有這樣,我們才能更好地解決問題,併為日後的故障排查積累寶貴的經驗。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 前言 如果你正在準備軟體工程師或軟體開發人員的面試,那麼你可能知道由於其開放性質和廣泛性,準備系統設計是多麼困難,但同時你也不能忽略它。在軟體工程界,如果你正在申請高級工程師/主管/架構師或更高級別的角色,系統設計是最受追捧的技能,也是整個過程中最重要的環節之一。如果你搞砸了這個,其他的都不重要 ...
  • 關於Node.js的開發者來說,在開發機器上管理多個不同版本的Node.js是一個常見痛點。之前在開發者安全大全專欄中,提到過解決方法:使用nvm,如果對於nvm還不瞭解的話,可以前往瞭解。 對於TJ來說,因為習慣敲命令了,所以nvm其實已經夠用了。但是,有的小伙伴還是更喜歡可視化的管理工具。所以, ...
  • 我希望在職業生涯早期就開始做的事情和我希望以不同的方式做的事情。 大家好,我已經做了八年半的軟體工程師。這篇文章來源於我最近對自己在職業生涯中希望早點開始做的事情以及希望以不同方式做的事情的自我反思。 我在這裡分享的對任何希望提高和進步到高級甚至更高職位的初級至中級開發者都很有用。 0 大綱 我的職 ...
  • 資料庫事務是什麼?事務的四大特性是什麼? 1.資料庫事務 事務是一組原子性的 SQL 語句,或者說一個獨立的工作單元。如果資料庫引擎能夠成功地對資料庫應用該組操作的全部語句,那麼就執行該組查詢。如果其中任何一條語句因為崩潰或其他原因無法執行,那麼所有的語句都不會執行。也就是說,事務內的語句,要麼全部 ...
  • 學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】 第四章、註入(Injection) 1.什麼是註入 通過Spring工廠及配置文件,為所創建對象的成員變數賦值 1.1為什麼需要註入 “通過編碼的方式,為 ...
  • 公眾號「架構成長指南」,專註於生產實踐、雲原生、分散式系統、大數據技術分享。 在本文中,我們將討論一些重要且常見的 Java Lambda 表達式面試問題和解答 1.什麼是 Lambda 表達式? lambda表達式只是一個沒有任何名稱的函數,它甚至可以用作函數中的參數,Lambda 表達式有利於函 ...
  • 目錄abstract class 和 interface 有什麼區別1.抽象類1.1抽象類的格式1.2抽象類註意事項2.介面2.1介面的格式2.2介面可以多繼承2.3介面的實現(implements)3.異同 abstract class 和 interface 有什麼區別 1.抽象類 抽象類:聲明 ...
  • 日誌在程式中的重要性非常的重要,當系統發生故障時,我們要隨時能排查出相關的日誌,細數日誌在Rust中的定義依賴及其實現。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...