【網(wǎng)絡(luò)】一次文件上傳慢/失敗問題的排查處理

一抑月、問題背景


OA系統(tǒng)部署完畢,小范圍上線使用后豫喧,收到用戶反饋石洗,說是通過消息對話框或者其他一些涉及文件上傳如審批的模塊,上傳文件速度非常慢紧显,2M的文件上傳要幾分鐘讲衫,幾十兆的文件基本就失敗了。

客戶OA 系統(tǒng) web端地址: https://oa.example.com

文件上傳鏈路:

用戶 -----> https://oa.example.com:443? ---- >客戶網(wǎng)絡(luò)設(shè)備(NAT)----> 外部反向代理 outer_nginx_vip:443? -------> 文件服務(wù)A ---->內(nèi)部反向代理? inner_nginx_vip:80 ----> 文件服務(wù)B ----> mongoDB


二孵班、問題排查


客戶網(wǎng)絡(luò)是電信 100M帶寬涉兽。

我用賬號測試在公司網(wǎng)絡(luò)(電信網(wǎng))涉及文件上傳的地方都測試上傳了,沒問題篙程。

另一位同事也做了測試沒問題枷畏,但是如果用筆記本連公司wifi(移動網(wǎng)),就能復(fù)現(xiàn)這個問題虱饿。

這個問題并不是所有用戶都有反饋拥诡,只有一定比例的用戶,說明并不是全局性的氮发。


1. 初步認(rèn)為文件上傳過程中 移動/聯(lián)通/電信之間的轉(zhuǎn)網(wǎng)導(dǎo)致上傳速度慢

分別用 在移動/電信網(wǎng)絡(luò)下渴肉, tracert? oa.example.com? 沒發(fā)現(xiàn)有什么問題,在移動網(wǎng)絡(luò)下測試電信地址折柠,經(jīng)過的路由當(dāng)然要多宾娜,說明不了什么批狐,而且反饋的客戶本身使用電信網(wǎng)絡(luò)的也不少扇售,所以排除這個原因前塔。


2. 可能是服務(wù)器時間同步、OA系統(tǒng)文件模塊問題


2.1. 發(fā)現(xiàn)代理服務(wù)器承冰、文件服務(wù)器和數(shù)據(jù)服務(wù)器之間有幾十秒的時間差华弓,于是搭建內(nèi)網(wǎng)ntp服務(wù)器,將所有服務(wù)器全部同步一遍困乒,然后將反向代理寂屏、文件服務(wù)相關(guān)工程,文件存儲相關(guān)數(shù)據(jù)庫全部重啟一遍娜搂,問題依然存在

2.2.? 測試上傳幾個文件迁霎,跟蹤文件上傳日志,從nginx反向代理日志到文件服務(wù)工程日志百宇,沒發(fā)現(xiàn)有什么問題

2.2.? 不經(jīng)客戶外網(wǎng)接入設(shè)備考廉,直接通過與內(nèi)網(wǎng)OA 服務(wù)器同一個網(wǎng)段的Windows服務(wù)器,將域名oa.example.com 寫hosts解析到 nginx_vip 上傳文件携御,非巢粒快

說明不是OA系統(tǒng)文件模塊本身問題。


3. 因為是有一定概率出現(xiàn)問題啄刹,懷疑問題出在客戶網(wǎng)絡(luò)設(shè)備的負(fù)載均衡器上

客戶方網(wǎng)絡(luò)人員于是將 NAT 映射的內(nèi)網(wǎng)地址從 nginx_vip 改為 nginx01_ip涮坐,測試發(fā)現(xiàn)問題依然存在,問題不在這里誓军。


4. 在內(nèi)網(wǎng)服務(wù)器上搭建其他服務(wù)袱讹,將端口映射出去,測試文件上傳

4.1 在 nginx01 服務(wù)器上使用nexus搭建一個web服務(wù)昵时,將 8081端口映射到 oa.example.com廓译,通過登錄 http:// oa.example.com:8081測試文件上傳。

那么债查, 這個服務(wù)經(jīng)過的 客戶網(wǎng)絡(luò)設(shè)備跟OA文件服務(wù)是相同的非区。


測試發(fā)現(xiàn),不同用戶上傳盹廷,有人快征绸,有人慢/失敗俄占;同一個用戶某天快管怠,某天慢/失敗。



4.2. 將內(nèi)網(wǎng)的? nginx01 缸榄、db01 兩臺服務(wù)器的 22 端口分別臨時映射到 oa.example.com渤弛,通過 ssh? username@oa.example.com 直接SSH 遠(yuǎn)程到內(nèi)網(wǎng)服務(wù)器

使用 SSH 客戶端工具通過 sftp直接上傳文件,發(fā)現(xiàn) 幾十k的小文件可以甚带,幾兆她肯、幾十兆的文件上傳一會佳头,就直接中斷了,不只是慢晴氨,而是直接失敗


5.? 懷疑客戶接入層網(wǎng)絡(luò)設(shè)備中使用了ECMP康嘉,且某條鏈路有問題

測試用nexus上傳文件發(fā)現(xiàn)一個非常詭異的現(xiàn)象:在家里通過vpn接入客戶網(wǎng)絡(luò),大小文件籽前,上傳一定成功亭珍;如果直接通過公網(wǎng),會某天成功枝哄,某天會失敗肄梨。

這就很讓人不可思議了,開始懷疑接入設(shè)備對接收的請求報文挠锥,使用了某種調(diào)度算法峭范,當(dāng)來源不變,調(diào)度走的鏈路不變瘪贱,而來源ip是其中一個因子纱控。

家里寬帶的出口公網(wǎng)ip,每天都是變化的菜秦,對客戶接入設(shè)備而言可以理解為 源ip變了甜害,那么請求報文被調(diào)度走的鏈路可能不一樣。


當(dāng)某天在家通過瀏覽器上傳失敗時球昨,改為接口調(diào)用命令行接口調(diào)用上傳:

curl -v -u username:password --upload-file file.zip http://oa.example.com:8081/repository/test/ file.zip

在家里Windows電腦上執(zhí)行失敗尔店,但是登錄我的一臺云主機(jī)執(zhí)行同樣的命令是成功的。



我們做了如下測試:

nexus 文件上傳主慰, http協(xié)議

SSH? 文件上傳嚣州,sftp協(xié)議

OA 文件上傳,http協(xié)議


通過上述測試共螺,不管使用什么協(xié)議该肴,都有失敗的概率,那么底層問題應(yīng)該出在tcp上藐不。

當(dāng)然在做nexus 匀哄、sftp文件OA系統(tǒng)文件上傳時間,同時開啟了客戶端Wireshark抓包雏蛮,抓包條件為 ip.host == xx.xx.xx.xx

xx.xx.xx.xx 為 oa.example.com 的公網(wǎng)ip


當(dāng)文件上傳慢/失敗時涎嚼,有大量的 亂序、丟包挑秉,從而導(dǎo)致tcp層的大量的重傳法梯,進(jìn)而導(dǎo)致文件上傳慢/失敗。

當(dāng)文件上傳正常時犀概,亂序立哑、丟包是偶現(xiàn)夜惭,影響不大。



三刁憋、 客戶網(wǎng)絡(luò)設(shè)備問題排查


從上面測試結(jié)果看滥嘴,基本可以確認(rèn)問題出在客戶的接入網(wǎng)絡(luò)設(shè)備上了木蹬。


通過跟客戶網(wǎng)絡(luò)人員逐層設(shè)備抓包測試至耻,發(fā)現(xiàn)問題可能是負(fù)載和匯聚直接互聯(lián)的接口,兩個一組聚合镊叁,協(xié)商出了問題尘颓。

注: 深信服網(wǎng)絡(luò)設(shè)備上,可以直接通過設(shè)備的管理界面晦譬,設(shè)置抓包參數(shù)開啟抓包疤苹,生成抓包文件,用wireshark分析敛腌。


負(fù)載? 和 匯聚層? 卧土,負(fù)載模式下,2X2? 有4條線路

當(dāng)關(guān)閉 鏈路3時像樊,原來上傳有問題尤莺,上傳都o(jì)k了,通過公網(wǎng)上傳100M左右的文件也很快了生棍,這也解釋了問什么一定概率的用戶文件上傳失敗了颤霎。


四、問題處理反思


一開始就應(yīng)該開啟wireshark 抓包涂滴,就能知道文件上傳慢友酱、失敗是因為 底層tcp報文 大量的 亂序、丟包和重傳柔纵,這樣就不用做那么多后面的文件上傳測試了缔杉。


當(dāng)然,如果沒有那么多的鏈路段測試搁料,客戶網(wǎng)絡(luò)人員不會如此配合壮吩,畢竟經(jīng)過這些測試之后,問題都指向了接入層網(wǎng)絡(luò)設(shè)備加缘,跟上層應(yīng)用沒有關(guān)系鸭叙!



五、參考


Nexus REST and Integration API

https://help.sonatype.com/repomanager3/integrations/rest-and-integration-api


Wireshark網(wǎng)絡(luò)抓包(一)——數(shù)據(jù)包拣宏、著色規(guī)則和提示

https://www.cnblogs.com/strick/p/6261463.html


Wireshark網(wǎng)絡(luò)抓包(二)——過濾器

https://www.cnblogs.com/strick/p/6261915.html


Wireshark網(wǎng)絡(luò)抓包(三)——網(wǎng)絡(luò)協(xié)議

https://www.cnblogs.com/strick/p/6262284.html


Wireshark網(wǎng)絡(luò)抓包(四)——工具

https://www.cnblogs.com/strick/p/6344486.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沈贝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子勋乾,更是在濱河造成了極大的恐慌宋下,老刑警劉巖嗡善,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異学歧,居然都是意外死亡罩引,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門枝笨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袁铐,“玉大人,你說我怎么就攤上這事横浑√藿埃” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵徙融,是天一觀的道長洒缀。 經(jīng)常有香客問我,道長欺冀,這世上最難降的妖魔是什么树绩? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮隐轩,結(jié)果婚禮上饺饭,老公的妹妹穿的比我還像新娘。我一直安慰自己龙助,他們只是感情好砰奕,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著提鸟,像睡著了一般军援。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上称勋,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天胸哥,我揣著相機(jī)與錄音,去河邊找鬼赡鲜。 笑死空厌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的银酬。 我是一名探鬼主播嘲更,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼揩瞪!你這毒婦竟也來了赋朦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宠哄,沒想到半個月后壹将,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡毛嫉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年诽俯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片承粤。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡暴区,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出密任,到底是詐尸還是另有隱情颜启,我是刑警寧澤偷俭,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布浪讳,位于F島的核電站,受9級特大地震影響涌萤,放射性物質(zhì)發(fā)生泄漏淹遵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一负溪、第九天 我趴在偏房一處隱蔽的房頂上張望透揣。 院中可真熱鬧,春花似錦川抡、人聲如沸辐真。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侍咱。三九已至,卻和暖如春密幔,著一層夾襖步出監(jiān)牢的瞬間楔脯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工胯甩, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留昧廷,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓偎箫,卻偏偏與公主長得像木柬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子淹办,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容