Broken pipe 問(wèn)題

結(jié)論

915投產(chǎn)演練時(shí),因服務(wù)器刀容存在問(wèn)題,引起了網(wǎng)絡(luò)抖動(dòng),致使響應(yīng)時(shí)間超長(zhǎng),耗盡了渠道接入數(shù)量,積累大量請(qǐng)求得不到請(qǐng)求,客戶(hù)端主動(dòng)斷開(kāi)鏈接,服務(wù)端后續(xù)處理返回時(shí)回寫(xiě)數(shù)據(jù)失敗。

問(wèn)題

以下截圖,是一段來(lái)自服務(wù)器的渠道接入(Socket)異常信息。


broken-pipe.png

通信代碼拋異常:

java.net.SocketExcetipn:Broken pipe(Write failed)

是什么意思呢?

直觀(guān)解釋 —— 回寫(xiě)(服務(wù)端向前端socket連接管道寫(xiě)返回?cái)?shù)據(jù))數(shù)據(jù)時(shí),鏈接(pipe)卻斷了!….

從應(yīng)用角度分析,這是因?yàn)榭蛻?hù)端(TWS)等待返回超時(shí)了,主動(dòng)斷開(kāi)了與服務(wù)端(BS)的鏈接—— TWS 與 BS是短鏈接,請(qǐng)求時(shí)建立,“請(qǐng)求》處理》響應(yīng)”完成后即結(jié)束,關(guān)閉鏈接。

從服務(wù)端日志分析,交易邏輯均正常,無(wú)異常,處理速度也很快(包括:BS自己、BS與外界)只是在通信返回時(shí)報(bào)了Broken pipe的異常。

如何引起的?

解決這個(gè)問(wèn)題,根本在于找出【通信鏈接是如何被關(guān)閉的】這個(gè)根本原因所在!

渠道接入連接數(shù)設(shè)置太小,并發(fā)量增加后,造成大量請(qǐng)求排隊(duì)等待,等待了69秒才獲得處理,但是處理時(shí)間超過(guò)1秒,此時(shí)TWS主動(dòng)斷開(kāi)了鏈接(假設(shè):超時(shí)時(shí)長(zhǎng)為70秒),雖然服務(wù)端完成了處理,但是返回結(jié)果時(shí),發(fā)現(xiàn)此前建立的通信鏈接已斷開(kāi)了——Broken pipe(Write failed) ;

分析思路

  1. 使用【kcusage】查看系統(tǒng)參數(shù)設(shè)置情況,是否正常!命令:
/usr/sbin/kcusage
kcusage 命令
  • 檢查系統(tǒng)用戶(hù)【可用文件句柄數(shù)】max_file_limt,設(shè)置太小,會(huì)導(dǎo)致渠道無(wú)法創(chuàng)建更多鏈接數(shù),導(dǎo)致渠道接入能力彈性伸縮失?。ㄔ黾咏尤霐?shù)失?。?/p>

  • 檢查系統(tǒng)用戶(hù)【可用線(xiàn)程數(shù)】max_thread_proc,如果設(shè)置太小,導(dǎo)致建立渠道連接時(shí)無(wú)法可用線(xiàn)程,也會(huì)導(dǎo)致渠道接入能力的彈性伸縮失敗(增加接入數(shù)失?。粓?bào)錯(cuò)如下:

  1. 檢查應(yīng)用上渠道連接數(shù)配置,【接入數(shù)】應(yīng)該與【預(yù)期并發(fā)數(shù)】大小匹配。

  2. 檢查【啟動(dòng)內(nèi)存】設(shè)置,應(yīng)該足夠大,以支持大并發(fā)時(shí)建立連接、處理業(yè)務(wù)所需要內(nèi)存。

-Xms1024m -Xmx2048m -XX:MaxPermSize=256m
  1. 檢查【網(wǎng)絡(luò)延遲】情況,因?yàn)榫W(wǎng)絡(luò)延遲會(huì)增加socket通信時(shí)間,增加了對(duì)渠道連接數(shù)的消耗量,即使接入數(shù)量為預(yù)期配置,但是會(huì)被很快消耗掉;
  • 查看客戶(hù)端與應(yīng)用服務(wù)器之間的【網(wǎng)絡(luò)情況】——ping, 是否有延遲,是否有丟包;
  • 查看應(yīng)用服務(wù)器服務(wù)【端口占用數(shù)】—— netstat -an | grep 9901 | grep “ESTABLISH| "wc -l ,對(duì)比ESTABLISH的數(shù)量和配置參數(shù)值大小情況;

收獲

同樣的代碼,部署新環(huán)境后,出現(xiàn)問(wèn)題,排查內(nèi)容和順序:

  1. 服務(wù)器參數(shù)檢查(硬件)

  2. 網(wǎng)絡(luò)環(huán)境的檢查(網(wǎng)絡(luò))

    檢查點(diǎn)1: 請(qǐng)求方與服務(wù)方之間的網(wǎng)絡(luò)ping情況
    檢查點(diǎn)2: 服務(wù)器之間的網(wǎng)絡(luò)ping情況;
    檢查點(diǎn)3: F5負(fù)載/軟負(fù)載/網(wǎng)關(guān) 這種入口系統(tǒng)與應(yīng)用服務(wù)器之間的網(wǎng)絡(luò)ping情況;

  3. 應(yīng)用自身的配置(應(yīng)用配置)

    • 檢查點(diǎn)1: 接入能力,如:渠道配置 —— ip、斷開(kāi)、接入數(shù)、彈性配置(初始、增量、最大)
    • 檢查點(diǎn)2: DB能力,如:數(shù)據(jù)庫(kù)配置——ip、斷開(kāi)、用戶(hù)、密碼、彈性配置(初始、增量、最大)、恢復(fù)
    • 檢查點(diǎn)3: 與Backend的通信能力,如:通道配置

3、做系統(tǒng)預(yù)熱(綜合)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,309評(píng)論 6 13
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,279評(píng)論 0 5
  • 第一部分 Python基礎(chǔ)篇(80題) 1、為什么學(xué)習(xí)Python? Python相對(duì)于其他編程語(yǔ)言有很多優(yōu)點(diǎn): ...
    清清子衿木子水心閱讀 1,825評(píng)論 0 1
  • 代碼如下: 1.寫(xiě)入 程序?qū)懭胛募?,需要注意?1.創(chuàng)建一個(gè)ofstream對(duì)象,如:fout,來(lái)管理輸出流;2....
    ZYiDa閱讀 292評(píng)論 0 0
  • 拾遺神獸目錄 自把上次在自家客廳遇見(jiàn)那個(gè)奇怪的貓物件扔了之后,尤悠好像就變得特別招貓喜歡。 從第一只貓咪出現(xiàn)在她家...
    如意的小花閱讀 367評(píng)論 2 2

友情鏈接更多精彩內(nèi)容