首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Redis Windows 64位運行一段時間報 Unknown error 導致連線逾時:疑似 Bug 建議升級版本

     編輯:程式設計疑難解答

現象

Windows 64位 Redis 運行一段時間後,日誌出現 Accepting client connection: accept: Unknown error,隨後 Jedis 連線逾時,重啟 Redis 恢復正常。日誌級別 debug 無其他錯誤,連線數僅 1。

原因分析

  • Redis 官方**不支援 Windows 為生產環境**,Windows 版為社群移植(Microsoft Open Tech 維護),存在已知穩定性問題。
  • accept: Unknown error 通常源於 Windows Socket 層 WSAECONNABORTED 或 WSAEMFILE(檔案描述符耗盡),在高併發或長時間運行下觸發。
  • Jedis 連線池未正確回收連線(未調用 close() 或 returnResource())加劇描述符洩漏。

解決建議

  1. 升級至最新 Windows 穩定版:Microsoft 存檔版 或 tporadowski 分支(含較新修復)。
  2. 生產環境遷移至 Linux:Docker docker run -d -p 6379:6379 redis:7-alpine 部署,穩定性、效能遠超 Windows 版。
  3. Jedis 連線池優化:
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(50); config.setMaxIdle(10); config.setMinIdle(2);
    config.setTestOnBorrow(true); config.setTestWhileIdle(true);
    確保 try (Jedis jedis = pool.getResource()) { ... } 自動歸還。
  4. 啟用 Redis 監控:INFO clients 觀察 connected_clients、blocked_clients,設定 maxclients 避免耗盡。

暫時緩解

設定排程任務每日重啟 Redis 服務(net stop redis & net start redis),但**強烈不建議長期依賴 Windows 版 Redis 承載業務流量**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved