https://www.cnblogs.com/yunjiandubu/p/11006919.html
https://blog.csdn.net/lijun169/article/details/86536696
最近項目雖然已經在正常運行,但是偶爾會有一些不知名的錯誤冒出來,比如時不時報一個數據庫主鍵重復或者某些時候會有null的異常報出來。看看代碼寫完能跑起來還只是開始而已,需要不斷精進重構,才能讓代碼運行流暢,今天就發現了另一個沒有見過的問題:Broken pipe。
認識broken pipe
pipe是管道的意思,管道里面是數據流,通常是從文件或網絡套接字讀取的數據。 當該管道從另一端突然關閉時,會發生數據突然中斷,即是broken。 對於文件File來說,這可能是文件安裝在已斷開連接的光盤或遠程網絡上。 對於socket來說,可能是網絡被拔出或另一端的進程崩潰。 在Java中,沒有具體的BrokenPipeException。 將此類錯誤包含在另一個異常,例如java.io.IOException:Broken pipe
解決問題
其實當該異常產生的時候,對於服務端來說,並沒有多少影響。因為可能是某個客戶端突然中止了進程導致了該錯誤。但是為了程序能夠美觀、優雅,還是要在合適的地方捕獲該異常,並處理一下。還有一種可能性就是程序里面有代碼執行時間過長,用戶等待時間過久,才會強行中止進程。那么這種情況下就需要去分析log中報異常的地方是經常發生在什么地方,合理優化該段代碼,提升代碼的運行速度,才能從根本上避免此類問題的再次發生。
出現“Broken pipe ”可能的情況:
1、客戶端請求服務器數據,服務器突然掛了;
2、客戶端請求服務端數據,服務端正常返回,但是客戶端由於超時等原因斷開。
原因分析:做了壓力測試,發現遇到的情況屬於第二種,由於去數據庫取數據的時候,30秒里無法正常獲取有效的數據庫連接,或者查詢時間長,導致OSB過來的請求超時,也就是客戶端超時了,服務端還試圖返回數據,結果導致如題異常。
解決方法:
1、增大數據庫連接池數量;
2、延長客戶端超時時間。
————————————————
版權聲明:本文為CSDN博主「李君的csdn」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lijun169/article/details/86536696