No buffer space available錯誤解決方案


 

生產環境,突然爆發問題,網絡正常,但是報網絡不通錯誤,重啟tomcat立刻好使

開始以為是tomcat的問題,調查了很久,后來加上堆棧日志才發現

簡單來說,就是1-4分鍾之內,使用了大量的http請求,達到了操作系統限制的最大值,所以許多請求處於wait狀態,導致程序錯誤

原代碼,httpClient 未關閉

finally {
            if (is != null) {
                is.close();
            }
            if (postMethod != null) {
                postMethod.releaseConnection();
            }
        }

 

新代碼,httpClient正確關閉

finally {
            if (is != null) {
                try{
                is.close();
                }catch(Exception e){
                    
                }
            }
            if(postMethod!=null)
                postMethod.releaseConnection();
            if(httpClient!=null)
                httpClient.getHttpConnectionManager().closeIdleConnections(0);
        }

 

改完這個沒好使...[2018/10/18更新]

繼續查資料,發現與操作系統有關,此程序所在系統是windowsServer2003 32位

修改注冊表

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters

新建 DWORD 類型的注冊表項,命名為:MaxUserPort

值數據: 60000(用十進制的格式錄入進去,此值的有效范圍為5000-65534)

新建 DWORD 類型的注冊表項,命名為:TCPTimedWaitDelay

值數據: 30(用十進制的格式錄入進去,TIME_WAIT的自動斷開時間,默認為4分鍾)

HKEY_LOCAL_MACHINE/CurrentControlSet/Services/Tcpip/Parameters下的以下三個參數: 
KeepAliveInterval,設置其值為1000(用十進制的格式錄入進去)
KeepAliveTime,設置其值為300000(單位為毫秒,300000代表5分鍾) (用十進制的格式錄入進去)
TcpMaxDataRetransmissions,設置其值為5(用十進制的格式錄入進去)

祝開發順利!


免責聲明!

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



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