成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解Bug之路-記一次線上請求偶爾變慢的排查

開發 開發工具
在遇到問題,并且思路陷入僵局時,可以通過一些腳本工具,例如grep以及awk或者其它一些工具對眾多日志進行分析,不停的去尋找規律,從無序中找到有序,往往能夠產生意想不到的效果!

 [[402645]]

本文轉載自微信公眾號「解Bug之路」,作者alchemystarlzy。轉載本文請聯系解Bug之路公眾號。

前言

最近解決了個比較棘手的問題,由于排查過程挺有意思,于是就以此為素材寫出了本篇文章。

Bug現場

這是一個偶發的性能問題。在每天幾百萬比交易請求中,平均耗時大約為300ms,但總有那么100多筆會超過1s,讓我們業務耗時監控的99.99線變得很尷尬。如下圖所示:

為了精益求精,更為了消除這個尷尬的指標,筆者開始探尋起這100多慢請求筆的原因。

先找一筆看看

由于筆者寫的框架預留了traceId,所以找到這筆請求的整個調用的鏈路還是非常簡單的。而且通過框架中的攔截器在性能日志中算出了每一筆請求的耗時。這樣,非常便于分析鏈路到底是在哪邊耗時了。性能日志中的某個例子如下圖所示:

  1. 2020-09-01 15:06:59.010 [abcdefg,A->B,Dubbo-thread-1,ipA->ipB] B.facade,cost 10 ms  

拉出來一整條調用鏈路后,發現最前面的B系統調用C系統就比較慢。后面鏈路還有幾個調用慢的,那先不管三七二十一,先分析B調用C系統吧。

我們從監控系統看出來正常的B系統調用C系統平均耗時只有20ms,這次的耗時增長了10倍!

正常思路,那當然是C系統有問題么,畢竟慢了10倍!去C系統的性能日志里面看看,

  1. 2020-09-01 15:06:59.210 [abcdefg,B->C,Dubbo-thread-1,ipB->ipC] C.facade,cost 20 ms  

啪啪啪打臉,竟然只有20ms,和平均耗時差不多。難道問題在網絡上?B到C之間由于丟包重傳所以到了200ms?

甩給網絡?

由于筆者對TCP協議還是比較了解的,tcp第一次丟包重傳是200ms,那么加上C處理的時間20ms,即220ms必須得大于200ms。而由于Nagle和DelayAck造成的tcp延遲也僅僅是40ms,兩者相加60ms遠遠小于200ms,所以這個200ms是丟包或者DelayAck的概率不大。

本著萬一呢的態度,畢竟下絕對的判斷往往會被打臉,看了下我們的監控系統,發現當時流量距離網卡容量只有1/10左右,距離打滿網卡還有非常遠的距離。

注意,這個監控的是由KVM虛擬機虛擬出來的網卡。看了這個流量,筆者感覺網絡上問題的概率不大。

GC了?

筆者第二個想到的是GC了,但是觀察了B和C的當時時刻的GC日志,非常正常,沒有FullGC,youngGC也在毫秒級,完全不會有200ms這么長。TCP重傳+雙方都youngGC?這個也太巧了點吧,也不是不可用。不過詳細的計算了時間點,并納入了雙方機器的時鐘誤差后,發現基本不可能。

再看看其它幾筆

盡然這個問題每天有100多筆(當然了,也不排除其中混雜了其它不同的問題),那么就試試看看其它幾筆,有沒有什么共性。這一看,發現個奇怪的現象,就是有時候是A調用B慢,有時候是B調用C慢,還有時候是E調用F慢。他們唯一的共性就是耗時變長了,但是這個耗時增加的比例有5倍的,有10倍的,完全沒有規律可循。

這不禁讓筆者陷入了沉思。

尋找突破點

既然通用規律只有變慢,暫時無法進一步挖掘。那么還是去B系統上去看看情況吧,去對應B系統上故意不用grep而是用less看了下,上下掃了兩眼。突然發現,貌似緊鄰著的幾條請求都很慢,而且是無差別變慢!也就是說B系統調用任何系統在這個時間點都有好幾倍甚至十幾倍的耗時!

終于找到了一個突破點,B系統本身或者其所屬的環境應該有問題!于是筆者用awk統計了下 B系統這個小時內每分鐘的平均調用時長,用了下面這條命令:

  1. cat 性能日志 | grep '時間點 | awk -F ' ' '{print $2, $5}' |.......| awk -F ' ' '{sum[$1]+=$3;count[$1]+=1}END{for(i in sum) {print i,sum[i]/count[i]}}'    

發現

  1. 15:00 20 
  2. 15:01 21 
  3. 15:02 15 
  4. 15:03 30 
  5. ....... 
  6. 15:06 172.4 
  7. 15:07 252.4 
  8. 15:08 181.4 
  9. 15:10 20 
  10. 15:10 21 
  11. 15:10 22 

在15:06-15:08這三分鐘之內,調用時間會暴漲!但奇怪的是B系統明明有幾十臺機器,只有這一臺在這個時間段內會暴漲。難道這個時間有定時任務?筆者搜索了下B系統昨天的日志,發現在同樣的時間段內,還是暴漲了!再接著搜索其它調用慢的,例如E->F,發現他們也在15:06-15:08報錯!于是筆者,一橫心,直接用awk算出了所有系統間調用慢機器白天內的所有分鐘平均耗時(晚上的流量小不計入內),發現:

所有調用慢的機器,都非常巧的在每個小時06-08分鐘之內調用慢。再觀察下慢的請求,發現他們也全部是分布在不同小時的06-08分時間段內!

定時任務?

第一反應是有定時任務,查了下所有調用機器的crontab沒有問題。問了下對應的開發有沒有調度,沒有調度,而且那個時間段由于耗時的原因,每秒請求數反而變小了。翻了下機器監控,也都挺正常。思維陷入了僵局,突然筆者靈光一閃,我們的應用全部是在KVM虛擬機上,會不會是宿主機出了問題。于是聯系了下SA,看看這些機器的宿主機是個什么情況。

每個變慢的機器的宿主機都有Redis!

這一看就發現規律了,原來變慢的機器上都和Redis共宿主機!

登陸上對應的Redis服務器,發現CPU果然在那個時間點有尖峰。而這點尖峰對整個宿主機的CPU毫無影響(畢竟宿主機有64個核)。crontab -l 一下,果然有定時任務,腳本名為Backup!它起始時間點就是從06分開始往GlusterFS盤進行備份,從06分開始CPU使用率開始上升=>07分達到頂峰=>08分降下來,和耗時曲線完全一致!

原來Redis往Gluster盤備份占據了大量的IO操作,所以導致宿主機上的其它應用做IO操作時會變得很慢,進而導致但凡是這個備份時間內系統間調用的平均耗時都會暴漲接近10倍,最終導致了高耗時的請求。

為什么調用請求超時1s的概率這么低

由于我們線上每個應用都有幾十臺機器,而基本每次調用只有幾十毫秒。所以只有這個請求連續落到三個甚至多個和Redis共宿主機的系統里面才會導致請求超過1s,這樣才能被我們的統計腳本監測到,而那些大量的正常請求完全拉平了平均值。

解決方案

我們將線上實時鏈路的系統從對應有Redis的宿主機中遷移出來,再也沒有那個尷尬的1s了。

總結

在遇到問題,并且思路陷入僵局時,可以通過一些腳本工具,例如grep以及awk或者其它一些工具對眾多日志進行分析,不停的去尋找規律,從無序中找到有序,往往能夠產生意想不到的效果!

 

責任編輯:武曉燕 來源: 解Bug之路
相關推薦

2021-05-19 14:03:48

磁盤故障

2023-01-04 18:32:31

線上服務代碼

2021-11-23 21:21:07

線上排查服務

2025-03-17 10:01:07

2019-09-10 10:31:10

JVM排查解決

2021-05-13 08:51:20

GC問題排查

2019-03-15 16:20:45

MySQL死鎖排查命令

2023-04-06 07:53:56

Redis連接問題K8s

2017-12-19 14:00:16

數據庫MySQL死鎖排查

2020-11-16 07:19:17

線上函數性能

2021-03-29 12:35:04

Kubernetes環境TCP

2020-08-24 07:34:39

網絡超時請求

2021-04-13 08:54:28

dubbo線程池事故排查

2022-11-16 08:00:00

雪花算法原理

2024-03-11 08:51:08

JVMSWAP內存

2022-12-17 19:49:37

GCJVM故障

2022-02-08 17:17:27

內存泄漏排查

2019-04-15 13:15:12

數據庫MySQL死鎖

2020-06-12 13:26:03

線程池故障日志

2024-10-15 09:27:36

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美11一13sex性hd | 欧美高清视频 | 日韩精品免费在线观看 | 亚洲精品在线观看网站 | 亚洲91| 搞黄视频免费看 | 精品视频在线观看 | 99久久精品视频免费 | 久久久久久久91 | 亚洲一区在线日韩在线深爱 | 久久久久国产精品午夜一区 | 在线观看视频一区二区三区 | 国产一区不卡 | 日本小电影网站 | 亚洲欧美一区二区三区1000 | 欧美操操操| 成人区一区二区三区 | 一区二区三区四区视频 | 欧美一区二区在线视频 | 日韩欧美不卡 | 亚洲欧美日韩精品久久亚洲区 | 欧美性生交大片免费 | 国产成人久久精品一区二区三区 | 欧美一区二区三区四区五区无卡码 | 日本羞羞影院 | 视频三区| 久久欧美高清二区三区 | 在线视频 中文字幕 | 天天夜夜操 | 天堂成人国产精品一区 | 狠狠骚 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 国产精品视频999 | 成人欧美一区二区三区在线播放 | 亚洲成人精品一区 | 97caoporn国产免费人人 | 欧美日日日日bbbbb视频 | 日韩欧美在线观看视频网站 | 欧美日韩在线精品 | 精品综合久久久 | 色婷婷国产精品综合在线观看 |