500錯誤以及java.net.SocketException: Too many open files錯誤

多線程批量處理任務需要頻繁用http請求接口,任務跑了十幾天後忽然報錯500 error。

開始以爲是因爲頻率太快導致錯誤。因爲處理時間完成沒要求,所以決定對每個任務進行了延時500ms處理。

幾天後忽然又報錯Caused by: java.lang.NoClassDefFoundError: org/apache/http/impl/client/RequestWrapper

看到這個錯以爲是因爲http請求時候資源沒有及時釋放,然後在代碼裏面加入以下代碼

                request.releaseConnection(); //釋放request
if (null != httpClient) {
HttpClientUtils.closeQuietly(httpClient);  //關閉連接
}
if (null != response)
try {
response.close();  //關閉response
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}

幾天後又報錯(爲什麼是幾天後才報錯,可能是重啓了服務的原因)

後發現http自己會釋放這些資源

以上都是彎路

然後延時去了,問題返回到報錯500和java.net.SocketException: Too many open files錯誤

<html>
<head><title>500 Internal Server Error</title></head>
<body bgcolor="white">
<center><h1>500 Internal Server Error</h1></center>
<hr><center>nginx/1.11.3</center>
</body>
</html>

細心一看中間層nginx已經報錯了。

查看nginx的error日誌發現問題

原來是open files參數設置過小1024不能滿足。

設置成10240後問題解決。

(技術水平有限,敬請指教。感恩!)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章