精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go 服務亂碼引發的線上事故

新聞 前端
最近遇到了一起依賴升級 + 異常數據引發的線上事故,教訓慘痛,本文對此進行回故和總結。

 [[325047]]

最近遇到了一起依賴升級 + 異常數據引發的線上事故,教訓慘痛,本文對此進行回故和總結。

背景

起因是我們使用的服務框架版本比較老,GC 次數的 metrics 打點一直為 0,咨詢了相關同學后,決定升級框架。升級的過程中,出現了 useofinternalpackagexxxnotallowed 的報錯,又咨詢了一下相關同學后,嘗試使用 go mod 解決。

從 go vendor 到 go mod 的升級的過程也不太順利,這里按下不表,最終是升級成功了。一同升級的還有 Go 版本,從 1.11 升級到 1.13。

周四上完線后,一切都看似很不錯:內存占用、GC 消耗的 CPU 有了優化,GC 次數的監控也有了。因為涉及到公司內部數據,圖我就不放了。

周五、周六都平安度過,周日出問題了,小組的同學從下午 12 點左右一直肝到凌晨 12 點,才松了一口氣。可憐我們來之不易的一個周日!

現象

周日 11 點 45 左右,端口的調用失敗率報警,同時有業務方反饋調用接口報錯。

同志們,關鍵時刻,完善的報警能給事故的處理和恢復贏得時間啊!

By case 排查,發現服務 shard3 集群的機器報 i/o timeout 錯誤。服務共有 4 個分片集群(根據 ID hash 到對應分片),其他 3 個集群完全正常。接著發現 shard3 集群的機器內存正常、端口還在,但 in/out 流量全部掉到幾十 KB/s,看日志也沒有發現任何異常。

重啟 shard3 集群的服務,重啟后的服務恢復正常,訪問 debug 端口,也是正常的。然而,十幾分鐘后,恢復的服務再次出現異常:in/out 流量再次掉到幾十 KB/s,訪問 debug 端口也沒有任何響應,開始慌了。

處理

上線出問題,第一時間回滾!

穩定性里面很重要的一條就是:有問題,先回滾。先止損,將事故影響降到最低,事后再來追查根因,總結復盤。

于是開始操作回滾, reset 到周四上線之前的一個 commit,重新打包,上線 shard3 集群。之后,對外接口完全恢復,操作回滾其他集群。

服務啟動之前,需要先加載幾十個 G 左右的數據,啟動過程長達 10+ min。我申請了一臺線上問題機器的 root 權限,執行了 strace-p 命令:

Go 服務亂碼了?“���”引發的線上事故

發現服務卡在 futex 系統調用上,這很明顯是一個 timer,但是 timer 為何會卡住?正常情況下,會有各種像 write,read 的系統調用,至少打日志、上報 mertrics 打點數據都會有 write 系統調用吧,哈?再執行 perf top 命令:

Go 服務亂碼了?“���”引發的線上事故

相關的只有 codec 函數,再看服務進程:

Go 服務亂碼了?“���”引發的線上事故

看 perf 輸出的結果,全部聚焦到 codec 這個第三方庫上,主要的兩個函數竟然是 codec.quoteStr 和 utf8.DecodeRuneInString。而我們用 codec 的地方是在程序啟動時加載數據文件以及定時的 dump 文件到本地。現在程序已經啟動了,只可能是 dump 文件出問題了。查看相關日志,果然有開始 dump 文件的日志記錄,卻一直沒有 dump 成功的記錄。

追查

事后追查階段嘗試在 test 集群上重現故障,因為只有單個分片出問題,說明此故障和特定數據有關,是 hash 到分片 3 的數據引起的問題。

又因為 test 集群并沒有分片,所以強行(改代碼 && 改環境變量)將其偽裝成 shard3 集群,然則并沒有復現,猜測可能是計劃下線了。

周二的時候,終于在 test 集群上模擬分片 1 時重現了線上故障。

對比 codec 的版本問題,果然有問題:周四上線前, vendor.json 里的版本是 v1.1.7,上線后,升級到了 v1.1.8,看來找到問題了!修改 codec 的版本,重新編譯、部署,問題依然存在!

這時,組里其他同學反饋 2018 年的時候也出過 codec 的問題,當時也是出現了異常數據導致重啟時加載文件不成功。于是我直接將周四上線前 vendor 文件夾里 codec.quoteStr 函數的代碼和 codec 的 v1.1.7 代碼進行對比,并不相同!vendor.json 里的版本并沒有正確反應 vendor 里實際的 codec 版本!!!

進一步查看提交記錄,發現在 2017 年 11 月份的時候有一次提交,修改了 vendor 文件夾里的代碼,但這時 vendor.json 并沒有 codec 記錄。而在 2019 年 11 月的一次提交,則只在 vendor.json 里增加了一條 codec 記錄,vendor 文件夾里的代碼并沒有更改:

  1. "checksumSHA1""wfboMqCTVImg0gW31jvyvCymJPE="
  2. "path""github.com/ugorji/go/codec"
  3. "revision""e118e2d506a6b252f6b85f2e2f2ac1bfed82f1b8"
  4. "revisionTime""2019-07-23T09:17:30Z"
  5. "tree"true 

仔細比對代碼,主要差異在這:

Go 服務亂碼了?“���”引發的線上事故

從現象及源碼看,大概率是在 codec.quoteStr 里死循環了!由于 Go 1.14 前都無法搶占正在執行無限循環且沒有任何函數調用的 goroutine,因此一旦出現死循環,將要進行 GC 的時候,其他所有 goroutine 都會停止,并且都在等著無限循環的 goroutine 停下來,遺憾的是,由于 for{} 循環里沒有進行函數調用,無法插入搶占標記并進行搶占。于是,就出現了這樣一幕:

Go 服務亂碼了?“���”引發的線上事故

只有 dump 數據文件這一個 goroutine 在干活,而且做的又是無限循環,服務整體對外表現就像是“死機”了一樣。并且這個 goroutine 由一個 timer 觸發工作,所以一開始我們看到的卡在一個 futex 調用上就可以解釋得通。因為 runtime 都停止工作了,timer 自然就沒法“到期”了。

接著,使用 Go 1.14 去編譯有問題的代碼版本,上到 test 集群,果然問題“消失”。服務狀態完全恢復正常,唯一不正常的是數據文件無法 dump 下來了,因為即使是 Go 1.14,也依然在執行無限循環,不干“正事”。

接下來的問題就是找到異常的數據了。使用上線前的版本(使用 go vendor),將 codec 替換為最新的 v1.1.8 版本,并且在 quoteStr 函數里打上了幾行日志:

Go 服務亂碼了?“���”引發的線上事故

部署到 test 集群,問題復現:

Go 服務亂碼了?“���”引發的線上事故

異常數據就是:“孫���雷”:

Go 服務亂碼了?“���”引發的線上事故

為什么會引發死循環,在調用 utf8.DecodeRuneInString 函數后:

  1. c == utf8.RuneError 
  2. size == 3 

再看 RuneError 的定義:

  1. const RuneError = '\\uFFFD' 

看一下兩個版本的代碼不同之處:

Go 服務亂碼了?“���”引發的線上事故

老版本的代碼,不會進入 if 分支,而新版本的代碼,由于 c==utf8.RuneError,所以先進入 if 分支,之后, size==3,不滿足里層分支,直接 continue 了,因此 i 值并沒有發生變化,死循環就這么發生了。

最后就是找到異常數據到底屬于哪個計劃。我嘗試去每個集群的機器上,從數據文件里尋找“孫���雷”。但文件太大了,幾十個 G, grep 搞不定,沒關系,使用 dd 工具:

  1. dd if=model_20200423155728 bs=1024 skip=3600000 count=1200 | grep '孫���雷' 

‍使用二分法找到了“孫���雷”!關于 dd+grep 的用法,總結了幾點:

  1. 每次從文件開頭先跳過 skip*bs 大小的內容,復制 count*bs 大小的內容過來用 grep 查詢。
  2. 如果不設置 count,就會查找整個文件,如果查到,則會有輸出;否則無。
  3. 對于特別大的文件,可以先把 count 設為跳過一半文件大小的值,采用二分法查找。如果找到,則限定在了前半范圍,否則在后半部分。使用類似的方法繼續查找……
  4. 如果找到,最后會輸出 count*bs 大小的內容。

反思

  1. 服務重大版本更新,至少在線下跑一周。
  2. 有問題,第一時間回滾。
  3. 對于工具的使用要規范。如不要隨意更改 vendor 文件夾的內容而不同步更新 vendor.json 文件,反之亦然。
  4. 因為 go mod 的版本選擇以及不遵守開源規范的第三方庫作者會讓使用者不知不覺、被動地引入一些難以發現的問題。可以使用 go mod vendor 代替,如果要鎖死版本的話,使用 replace。

 

 

責任編輯:張燕妮 來源: Go語言中文網
相關推薦

2023-02-16 08:55:13

2020-04-02 07:31:53

RPC超時服務端

2023-09-07 08:05:32

三元表達式自動

2020-04-21 08:24:09

IO機器代碼

2020-12-09 08:59:59

MongoDB復合索事故

2021-10-08 08:55:23

FacebookBGP工具

2021-01-20 10:16:26

高并發數據服務

2022-04-08 08:48:16

線上事故日志訂閱者

2024-08-20 21:27:04

docker部署容器

2024-11-26 06:53:01

雪花算法最大值

2019-01-16 09:20:42

架構設計JVM FullGC宕機事故

2023-01-16 14:49:00

MongoDB數據庫

2022-07-11 13:58:14

數據庫業務流程系統

2020-11-16 12:35:25

線程池Java代碼

2022-06-06 11:31:31

MySQL數據查詢

2024-03-06 20:00:50

MySQL優化器索引

2025-10-10 08:20:59

2025-03-10 08:20:53

代碼線程池OOM

2015-10-14 10:29:43

容器混搭Redis線上故障

2020-09-22 08:06:45

代碼事故
點贊
收藏

51CTO技術棧公眾號

99ri日韩精品视频| 9999热视频在线观看| 久久精品国产99国产| 久久亚洲欧美日韩精品专区 | 91麻豆精品国产综合久久久 | 国产又色又爽又黄又免费| 国内精品久久久久久久影视蜜臀 | 欧美精品精品一区| 免费一级特黄特色毛片久久看| 精品美女视频在线观看免费软件| 久久精品久久99精品久久| 久久久久久香蕉网| 手机免费观看av| 牲欧美videos精品| 日韩一区二区中文字幕| www.超碰com| 青草在线视频| 亚洲视频小说图片| 日韩免费一区二区三区| 黄色小视频免费在线观看| 日本成人中文字幕在线视频| 国内精品400部情侣激情| 欧美色视频一区二区三区在线观看 | 一区二区三区四区在线播放| 视频一区视频二区视频三区视频四区国产 | 国产一区第一页| 欧美男gay| 精品国内二区三区| 色婷婷激情视频| 成人精品动漫| 激情懂色av一区av二区av| 超碰在线免费观看97| 精品一二三区视频| 久久新电视剧免费观看| 国产尤物99| 男男激情在线| 国产呦小j女精品视频| av大片在线| 国产精品区一区二区三| 鲁丝片一区二区三区| 国产欧美一区二区三区视频在线观看| 国产亚洲一区在线| 久久久久久久久91| 久久久久久天堂| 欧美精品九九| 欧美人交a欧美精品| 久久免费看少妇高潮v片特黄| 成人亚洲一区| 在线观看亚洲视频| 亚洲精品天堂网| 欧美色图国产精品| 一区二区三区黄色| 免费看91的网站| 成人免费在线播放| 色噜噜久久综合伊人一本| 久久精品三级视频| 日韩精品水蜜桃| www.日本久久久久com.| 91嫩草丨国产丨精品| 亚洲xxx拳头交| 欧美成人亚洲成人| 国产亚洲精品女人久久久久久| 韩国欧美一区| 91sa在线看| 在线免费观看av网址| 日韩精品色哟哟| 国产男人精品视频| 国产美女三级无套内谢| 国产激情一区二区三区| 国产日韩精品久久| 免费在线黄色网址| 国产精品不卡一区| 免费在线看黄色片| xxx欧美xxx| 欧美精品电影在线播放| 国产精品二区视频| 欧美尿孔扩张虐视频| 亚洲天堂免费视频| 国产小视频你懂的| 尤物网精品视频| 国产成人精品一区二区| 国产精品久久久久久免费 | 欧美色网址大全| 超薄丝袜一区二区| 日操夜操天天操| 日韩电影网1区2区| 超碰97在线资源| 国产一区电影| 一区二区三区加勒比av| 久久国产乱子伦免费精品| 亚洲福利影视| 亚洲精品久久久久久久久久久久久| caopeng视频| 一区二区免费不卡在线| 日本乱人伦a精品| 国产精品久久婷婷| 久久久蜜桃精品| 伊人网在线免费| 韩国成人动漫| 日韩欧美www| 亚洲а∨天堂久久精品2021| 国内在线观看一区二区三区| 国产精品老女人视频| av网站免费播放| 国产日本一区二区| 精品国产av无码一区二区三区| 99久久伊人| 亚洲第一偷拍网| 午夜激情福利网| 日韩精品免费视频人成| 国产乱子伦精品| 大片免费在线看视频| 色香蕉久久蜜桃| 国产激情视频网站| 国产一区清纯| 成人黄色免费网站在线观看| 精品电影在线| 无码av免费一区二区三区试看 | 99精品视频在线免费观看| 一区二区精品免费视频| 美女100%一区| 亚洲精品国产精品国产自| 欧美激情图片小说| 毛片不卡一区二区| 日本一区二区三区在线视频 | 高清免费日韩| 国产高清一区二区三区视频| 欧美综合色免费| 全黄一级裸体片| 亚洲一区成人| 久久精品人人做人人爽电影| 久草免费在线色站| 欧美大片在线观看一区二区| 日韩三级在线观看视频| 精品一区二区三区欧美| 夜夜爽www精品| 国产欧美在线观看免费| 最新国产精品亚洲| 在线观看国产成人| 中文字幕精品一区二区三区精品| aaaaaa亚洲| 国产精品欧美在线观看| 日本一区二区不卡| 能在线看的av| 91精品福利在线| 欧美波霸videosex极品| 日韩成人免费看| 天堂资源在线亚洲资源| 粉嫩91精品久久久久久久99蜜桃| 伊人精品在线观看| 亚洲手机在线观看| 亚洲欧美色综合| 日本人dh亚洲人ⅹxx| 欧美日韩国产免费观看| 国产91视觉| 欧美激情网站| 亚洲女人被黑人巨大进入al| 超碰在线免费97| 中文字幕一区二区不卡| 国产精品中文久久久久久| 综合激情视频| 国产精品一区在线观看| 日韩伦理三区| 色妞一区二区三区| 精品久久国产视频| 欧美日韩亚洲国产一区 | 亚洲女与黑人做爰| 韩国三级视频在线观看| 亚洲综合激情| 亚洲成人蜜桃| 日韩黄色av| 日av在线播放中文不卡| 95在线视频| 日韩美女视频在线| 国产精品久久久免费视频| 国产亚洲欧美激情| 亚洲一区二区偷拍| 国产精品主播| 在线视频不卡一区二区| 国产 日韩 欧美 综合 一区| 国产精品爱啪在线线免费观看| 国产激情在线观看| 日韩精品视频在线免费观看| 一区二区视频在线免费观看| 亚洲久草在线视频| 六月婷婷七月丁香| 国产一区二区看久久| 欧美色图色综合| 婷婷色综合网| 蜜桃999成人看片在线观看| 四虎影视国产精品| 68精品国产免费久久久久久婷婷| av中文天堂在线| 欧美不卡激情三级在线观看| 中文字幕免费视频观看| 亚洲午夜电影网| 成人黄色免费网址| 成人夜色视频网站在线观看| 日韩中文字幕免费在线| 国产一区亚洲| 亚洲一区二区免费视频软件合集 | 成人免费av电影| 欧美激情综合色| 在线国产91| 亚洲美女激情视频| 亚洲精品综合网| 欧美日韩在线直播| 亚洲熟女综合色一区二区三区| 自拍偷拍亚洲综合| 免费看黄色av| 成人高清av在线| 国产三级生活片| 老色鬼久久亚洲一区二区| 你真棒插曲来救救我在线观看| 99国产精品一区二区| 久久精品综合一区| 午夜视频在线观看精品中文| 国产精品自产拍在线观看中文| 最新中文字幕在线播放| 欧美精品久久久久| av免费看在线| 萌白酱国产一区二区| 在线a人片免费观看视频| 亚洲欧洲成视频免费观看| 黑人精品一区二区三区| 日韩欧美久久一区| 国产视频第一页| 欧美高清dvd| 91久久国语露脸精品国产高跟| 欧美伊人久久久久久午夜久久久久| 欧美日韩综合在线观看| 亚洲成av人片| 国产午夜精品一区二区理论影院| 亚洲精品videosex极品| 加勒比婷婷色综合久久| 亚洲激情综合网| 欧美成人精品欧美一级| 一区二区三区丝袜| 青青操国产视频| 亚洲激情五月婷婷| 久久久久久久伊人| 亚洲成人1区2区| 国产无遮挡又黄又爽又色| 亚洲一区二区视频在线观看| 久久精品www| 亚洲综合男人的天堂| 久久久精品国产sm调教| 亚洲国产wwwccc36天堂| 日本在线视频免费观看| 欧美日韩国产影院| 无码人妻熟妇av又粗又大| 在线观看网站黄不卡| 正在播放亚洲精品| 欧美精品一卡二卡| www.国产.com| 亚洲激情视频网站| 青青久在线视频| 永久免费毛片在线播放不卡| h视频在线免费| 久久亚洲精品毛片| 9999在线视频| 日本国产高清不卡| 日韩电影精品| 99www免费人成精品| 日韩系列在线| 亚洲国产精品综合| 国产一区清纯| 毛片av免费在线观看| 久久精品国产99国产| 一区二区在线免费观看视频| 99久久伊人精品| av网站免费在线看| 亚洲欧美色图小说| 成人精品在线看| 精品视频999| 人人妻人人澡人人爽人人欧美一区 | 色综合久久综合网欧美综合网| 亚洲天堂视频在线播放| 日韩欧美成人一区二区| 可以在线观看的av| 久久婷婷国产麻豆91天堂| 极品视频在线| 成人黄色中文字幕| 天天躁日日躁狠狠躁欧美巨大小说| 亚洲.欧美.日本.国产综合在线| 欧美午夜不卡影院在线观看完整版免费| 人人妻人人添人人爽欧美一区| 麻豆专区一区二区三区四区五区| 欧美久久久久久久久久久| 欧美国产激情一区二区三区蜜月| 九九九在线视频| 欧美三级一区二区| 五月天激情开心网| 久久精品成人一区二区三区 | 欧洲av在线精品| 丰满少妇高潮在线观看| 尤物九九久久国产精品的分类 | 国产白袜脚足j棉袜在线观看 | 亚洲欧洲自拍偷拍| 欧美aaaaaaa| 成人h视频在线观看播放| 日韩av中文字幕一区| 少妇高潮大叫好爽喷水| 久久久青草婷婷精品综合日韩| 日日干日日操日日射| 26uuu国产在线精品一区二区| 亚洲二区在线播放| 欧美三级在线视频| 加勒比一区二区三区在线| 欧美激情18p| 97精品资源在线观看| 欧美中日韩免费视频| 99国产精品久久久久久久| 亚洲三级在线视频| 国产精品卡一卡二卡三| 国产成人无码专区| 亚洲精品影视在线观看| 9999热视频在线观看| 国产乱码一区| 国产精品久久| 国产女主播在线播放| 亚洲视频中文字幕| 中文字幕在线播放不卡| 国产亚洲精品久久久久动| 黄毛片在线观看| 国产一区免费视频| 亚洲视频久久| 少妇搡bbbb搡bbb搡打电话| 亚洲天堂av一区| 国产男男gay体育生白袜| 色婷婷综合成人| 欧美亚洲综合视频| 亚洲视频sss| 卡一卡二国产精品| 亚洲精品卡一卡二| 日韩一区二区电影| 日韩av激情| 成人看片视频| 亚洲第一黄色| 青青草视频播放| 黑人巨大精品欧美一区二区| 青青草视频在线免费观看| 国产97色在线| 欧美一区电影| 8x8x成人免费视频| 亚洲美女视频一区| 免费的黄色av| 91av在线网站| 成人网18免费网站| 欧美视频亚洲图片| 一区二区三区免费| 视频一区二区免费| 国产精品成人播放| 首页国产精品| 熟妇女人妻丰满少妇中文字幕| 亚洲va欧美va国产va天堂影院| 三级毛片在线免费看| 国产精品第10页| 婷婷六月综合| 国产人妻黑人一区二区三区| 欧美午夜视频在线观看| av在线之家电影网站| 92国产精品久久久久首页| 国产伊人精品| 亚洲理论片在线观看| 678五月天丁香亚洲综合网| 色屁屁www国产馆在线观看| 国精产品一区二区| 奇米精品一区二区三区在线观看| 熟女少妇a性色生活片毛片| 精品国产露脸精彩对白| 久久久成人av毛片免费观看| 日本一区二区免费高清视频| 粉嫩在线一区二区三区视频| 天堂网视频在线| 久热99视频在线观看| 要久久电视剧全集免费| 91 在线视频观看| 精品久久久久人成| 色老头视频在线观看| 国产精品区一区二区三在线播放 | 黄色录像a级片| 欧美日韩精品专区| xxxx成人| 亚洲美女自拍偷拍| 久久综合成人精品亚洲另类欧美| 亚洲无码精品国产| 亚洲91精品在线| 久久久久亚洲| 免费看黄色的视频| 日韩欧美精品在线视频| 快播电影网址老女人久久| 成人短视频在线观看免费| 久久精品亚洲国产奇米99| 国产成人av免费看| 国产大片精品免费永久看nba| 欧美色一级片| 黄色裸体一级片| 亚洲男子天堂网| 老司机精品视频在线播放|