当前位置:网站首页>技術實踐|線上故障分析及解决方法(上)
技術實踐|線上故障分析及解决方法(上)
2022-07-04 00:47:00 【51CTO】
線上故障通常是指大規模的影響線上服務可用性的問題或者事件,而對於線上故障的處理不僅是一項技術活,更是對技術人員/技術團隊應急反應能力的考驗。本文主要從線上故障的分類、應對思路、出現原因等方面入手,總結一些經驗和問題解决方法,以求與各比特同仁探討交流。
一、在線故障分類
■ 意料之外的錯誤、無響應或響應緩慢
■ 服務中,影響用戶體驗
■ 不能停機或大面積停機
■ 需要盡快修複
二、應對思路
根據經驗來分析,如果應急團隊中有人對相應的問題有經驗,並確定能够通過某種手段恢複系統的正常運行,那麼應該第一時間恢複(回滾等),同時務必要保留現場,以備後續對問題的定比特和修複;如果沒有人有經驗,則需要使用比較粗暴的辦法保證服務可用,如定時重啟、限流、降級等。
業務負責人、技術負責人、核心研發人員、架構師、運維工程師以及運營人員對問題的原因進行快速分析。分析的過程需要首先考慮系統近期的變化,包括以下幾個方面:
■ 系統最近是否進行了發布上線工作?
■ 服務的使用方是否有運營活動?
■ 網絡是否有流量的波動?
■ 最近的業務量是否上昇?
■ 運營人員是否在系統中做了變動?
■ 依賴的基礎平臺和資源是否進行了發布上線?
■ 依賴的其他系統是否進行了發布上線?
三、可能的原因
■ 代碼Bug:邏輯不嚴謹、連接未釋放
■ 代碼性能:循環外部調用、未使用批量讀取、正則循環等
■ 內存泄漏:本地緩存
■ 异常流量:DDOS
■ 業務量提昇:容量預估失誤
■ 外部系統問題:數據庫、搜索引擎、分布式緩存、消息隊列等中間件的性能問題
CPU、內存、IO指標异常
四、三步走
■ 監控:“我並不知道我要做什麼”。需要監控機制來發現、暴露系統的性能問題。這裏一般依賴於系統級別或者業務級別的監控工具。
■ 分析:“我知道我要做什麼”。需要計算機基礎知識和分析工具。
■ 解决:“我知道我需要知道什麼了”。系統、程序參數的調整、代碼的重構優化。
理解一個系統應該如何工作並不能使人成為專家,只能靠調查系統為何不能正常工作才行。
1. 准備工作
編輯
故障分析的准備工作、需要掌握的知識,based on CentOS 6.5 && JDK 1.8.0_121
■ 計算機基礎知識:計算機網絡、操作系統、計算機組成原理
■ Java內存管理:垃圾回收算法、垃圾回收器、關鍵GC參數、JVM內存模型等
■ Java代碼基准性能測試:可以使用JMH(微基准測試框架)來進行,能够去除JIT熱點代碼編譯對性能的影響
■ HotSpot虛擬機體系結構
■ 系統參數調優
■ 掌握系統常用診斷工具、JDK自帶診斷工具以及其他診斷工具的使用
■ 了解業務系統:總體架構、壓力方向、容量預估、系統相關軟件的版本、模式以及參數
2. 常用系統診斷工具-CentOS自帶
■ uptime:系統的運行時間、平均負荷,包括1分鐘、5分鐘、15分鐘內可以運行的任務平均數量,包括正在運行的任務、雖然可以運行但正在等待某個處理器空閑以及阻塞在不可中斷休眠狀態的進程(等待IO,狀態為D)的任務。
第一部分顯示的是系統時間。左起第一條信息是22:36:32,這就是當前系統時間,以24小時格式輸出。
第二部分顯示的是系統運行時間。up 10 days,11:21,錶示該機的系統已經運行了10天11小時21分鐘。當系統重啟後將會清零。
第三部分的信息是顯示已登陸用戶的數量。顯示的是1 user ,即當前登錄用戶數量為1。
最後一個信息是系統的平均負載量。0.00,,0.05, 0.07分別代錶著過去1分鐘、5分鐘、15分鐘系統的平均負載量。負載量越低意味著系統性能越好。
編輯
■ dmesg | tail:該命令會輸出系統日志的最後10行。常見的OOM kill和TCP丟包在這裏都會有記錄。
■ free -m:該命令可以查看系統內存的使用情况,-m參數錶示按照兆字節顯示。Buffer和Cache都被計算在了used裏面。真正反映內存使用狀况的是第二行。如果可用內存較少,會使用swap區,增加IO開銷,降低性能。
編輯
■ vmstat 1:實時性能檢測工具,可以展現給定時間間隔的服務器的狀態值,包括服務器的CPU使用率、內存使用、虛擬內存交換情况、IO讀寫情况等系統核心指標。r,等待CPU資源的進程數,這個比平均負載load更能體現CPU的繁忙狀况;b,阻塞在不可中斷休眠狀態的進程數;si、so,swap區的使用情况,如果不為0說明已經開始使用swap區;us、sy、id、wa、st,CPU使用狀况,id + us + sy = 100。
編輯
這錶示vmstat每2秒采集數據,一直采集,直到結束程序。
■ top:包含了系統全局的很多指標信息,包括系統負載情况、系統內存使用情况、系統CPU使用情况等等,基本涵蓋了上述幾條命令的功能。
■ netstap -tanp:查看TCP網絡連接狀况。
iproute工具集:ss,ip,可以替代netstat
3. 常用系統診斷工具-Sysstat
■ mpstat -P ALL 1:該命令用來顯示每個CPU的使用情况。如果有一個CPU占用率特別高,說明有可能是一個單線程應用程序引起的。
■ sar -n DEV 1:sar命令主要用來查看網絡設備的吞吐率。可以通過網絡設備的吞吐量,判斷網絡設備是否已經飽和。
■ sar -n TCP,ETCP 1:查看TCP連接狀態。active/s,每秒主動發起的連接數目(connect);passive/s,每秒被動發起的連接數目(accept);retrans/s,每秒重傳的數量,能够反映網絡狀况和是否發生了丟包。
■ iostat -xz 1:查看機器磁盤IO情况。await(ms),IO操作的平均等待時間,是應用程序在和磁盤交互時,需要消耗的時間,包括IO等待和實際操作的耗時;avgqu-s,向設備發出的平均請求數量;%util,設備利用率。
sar、iostat、mpstat、pidstat屬於sysstat軟件套件
4. JDK診斷工具
■ jstack:Java堆棧跟踪工具,主要用於打印指定Java進程的、核心文件或遠程調試服務器的Java線程的堆棧跟踪信息。
■ jmap:Java內存映射工具(Java Memory Map),主要用於打印指定Java進程、核心文件或遠程調試服務器的共享對象內存映射或堆內存細節。
■ jhat:Java堆分析工具(Java Heep Analysis Tool),用於分析Java堆內存中的對象信息。
■ jinfo:Java配置信息工具(Java Configuration Information),用於打印指定Java進程、核心文件或遠程調試服務器的配置信息,也可以動態修改JVM參數配置。
■ jstat:JVM統計檢測工具(Java Statistics Monitoring Tool),主要用於監測並顯示JVM的性能統計信息,包括gc統計信息。
■ jcmd:Java命令行(Java Command),用於向正在運行的JVM發送診斷命令請求。由於jmap官方標注的是unsupported,jcmd可以作為其替代工具。
■ visualvm:通過JMX接口連接JVM進程,從而能够看到JVM上的線程、內存、類等信息。可以安裝各種插件。(通過CATALINA_OPTS開啟Tomcat jmx接口)
■ jconsole:功能類似於visualvmv,可以顯示具體的線程堆棧信息以及內存中各個年代的占用情况,並支持直接遠程執行MBEAN。
5. 其他工具
■ jmc:Java Mission Control,是一款采樣型的集診斷、分析和監控於一體的非常强大的工具。由於收費的原因,用的不是太多。
■ greys-atonomy:在線診斷工具,通過動態修改字節碼能够達到無須重啟JVM添加日志、監測方法耗時等動態增强代碼的目的。
■ arthas:阿裏開源的Java診斷工具箱,基於greys-atonomy而來,包括在線診斷、反編譯字節碼、查看最耗費資源的Java線程等。
■ jwebap:JavaEE性能檢測框架,基於ASM增强字節碼實現。支持:HTTP請求、JDBC連接、method的調用軌迹跟踪以及次數、耗時的統計。二次開發的suishen-webap,加入了對Java8的支持以及Redis連接的監控。
■ awesome-scripts:封裝了很多常用診斷工具、脚本等,包括greys-atonomy、sjk、VJTools以及獲取最耗資源的線程堆棧信息、統計TCP連接數目等脚本。(未完待續)
边栏推荐
- 我管你什么okr还是kpi,PPT轻松交给你
- For loop
- 1-redis architecture design to use scenarios - four deployment and operation modes (Part 1)
- 国元证券开户是真的安全可靠吗
- Global and Chinese market of process beer equipment 2022-2028: Research Report on technology, participants, trends, market size and share
- 挖财帮个人开的证券账户安全吗?是不是有套路
- Software testers, how can you quickly improve your testing skills? Ten minutes to teach you
- Global and Chinese markets for coronary artery disease treatment devices 2022-2028: Research Report on technology, participants, trends, market size and share
- Leetcode 121 best time to buy and sell stock (simple)
- Function: store the strings entered in the main function in reverse order. For example, if you input the string "ABCDEFG", you should output "gfedcba".
猜你喜欢
Regular expression of shell script value
(Introduction to database system | Wang Shan) Chapter V database integrity: Exercises
Sorry, Tencent I also refused
MySQL 8.0.12 error: error 2013 (HY000): lost connection to MySQL server during query
The FISCO bcos console calls the contract and reports an error does not exist
Cesiumjs 2022^ source code interpretation [8] - resource encapsulation and multithreading
Eight year test old bird, some suggestions for 1-3 year programmers
在寻求人类智能AI的过程中,Meta将赌注押向了自监督学习
Joint examination of six provinces 2017
What is regression testing? Talk about regression testing in the eyes of Ali Test Engineers
随机推荐
查询效率提升10倍!3种优化方案,帮你解决MySQL深分页问题
老姜的特点
7.1 学习内容
The difference between objects and objects
Global and Chinese market of underwater bags 2022-2028: Research Report on technology, participants, trends, market size and share
PMP 考试常见工具与技术点总结
Stock price forecast
Arc 135 supplementary report
What are the application fields of digital twins in industry?
BBS forum recommendation
Self study software testing. To what extent can you go out and find a job?
1-Redis架构设计到使用场景-四种部署运行模式(上)
Wechat official account and synchronization assistant
Interview script of Software Test Engineer
Design of database table foreign key
不得不会的Oracle数据库知识点(一)
Oracle database knowledge points that cannot be learned (III)
机器学习基础:用 Lasso 做特征选择
【.NET+MQTT】.NET6 环境下实现MQTT通信,以及服务端、客户端的双边消息订阅与发布的代码演示
It is worthy of "Alibaba internal software test interview notes" from beginning to end, all of which are essence