MongoDB 查詢超時異常 SocketTimeoutException

發表於2016-10-28

在對超過百萬條記錄的集合進行聚合操作。

偶爾會發生Read timed out 異常。

通過多次測試,發現執行一次聚合平均時間為5s,超過5s時就會報錯!

然後檢視MongoDB的配置資訊:

socket-timeout的預設配置為0,也就是沒有限制。

沒有超時限制,系統出了問題也不容易發現,應該根據實際情況,給出合理的超時時間。

通過多次測試發現最長執行時間為6秒,就把超時時間設定成了10000。

注意:MongoDB在與Spring整合時,如果要配置多個MongDB源,只會啟用最後一個配置。

應該把引數配置資訊儲存在properties檔案中。

通過Java API獲取配置引數

最後一點:  ConnectionTimeOut和SocketTimeOut的區別:

一次完整的請求包括三個階段:1、建立連線 2、資料傳輸 3、斷開連線

如果與伺服器(這裡指資料庫)請求建立連線的時間超過ConnectionTimeOut,就會拋 ConnectionTimeOutException,即伺服器連線超時,沒有在規定的時間內建立連線。

如果與伺服器連線成功,就開始資料傳輸了。

如果伺服器處理資料用時過長,超過了SocketTimeOut,就會丟擲SocketTimeOutExceptin,即伺服器響應超時,伺服器沒有在規定的時間內返回給客戶端資料。

相關文章