java.io.IOException: Broken pipe


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM