java.net.SocketException: Write failed: Broken pipe異常分析


近期,應用服務器經常拋出 java.net.SocketException: Write failed: Broken pipe異常,在網上搜了一下相關信息,現匯總如下:

資料:

Broken pipe產生的原因通常是當管道讀端沒有在讀,而管道的寫端繼續有線程在寫,就會造成管道中斷。(由於管道是單向通信的) SIGSEGV(Segment fault)意味着指針所對應的地址是無效地址,沒有物理內存對應該地址。 以下是UNIX的信號解釋: 11 / SIGSEGV: Unerlaubter Zugriff auf Hauptspeicher (Adressfehler). 12 / SIGUSER2: User-defined Signal 2 (POSIX). 把_JAVA_SR_SIGNUM改成12只是將信號至成user-defined,讓它不報出來而已,不能解決問題。 建議采取的方式:

1. 資源沒有完全釋放,用完后要至NULL 值(JAVA的GC沒那么完善)

2. 數據庫連接順序關閉!(RS,PS,CONN)

3. 優化JAVA虛擬機 加入相應的內存參數!

4. 不要在數據庫中獲取大段文本(即一個欄位的值不要太大)

5. JAVA 不推薦 用String 獲取大量信息。(容易造成內存泄露,建議用StringBuffer)

6. 頁面重復提交

7. 盡量將METHOD移到JAVA中,在JSP中所有的方法都看做全局變量,編譯執行本身就有很多問題。

8. 如果是查詢功能,盡可能的使用非XA(事務)。

9. 盡量用較新較穩定版本的JDK,低版本的JVM本身也有很多BUG,比如1。5的垃圾回收比起1。2,1。3一定是非常明顯的進步。

10. LINUX系統本身沒有這么穩定,有些問題無法避免的~~:)


免責聲明!

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



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