jedis異常:Could not get a resource from the pool

前幾天公司后端系統出現了故障,導致app多個功能無法使用,查看日志,發(fā)現日志出現較多的redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool的異常信息,顯而易見,jedis/redis出現了問題。因為是connection的相關的問題,所以看了一下jedis和連接數相關的配置項,maxIdle和maxTotal都是200,jedis的封裝也在finally中釋放了connection,所以初步猜測問題發(fā)生在redis服務端

1.jedis機器-->ping-->redis機器,毫秒級的響應時間----網絡暢通

2.使用netstat -apn |grep redis-server連接數為20多個--網絡連接數正常

3.free ?-m內存使用率60%---(表面上)內存夠用

4.df ? ? -h磁盤使用率15%---磁盤空間充足

5.使用redis-cli,執(zhí)行info命令,client部分:

#Clients

connected_clients:18

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

clients數量也正常

6.使用redis-cli,執(zhí)行ping命令,異常信息出來了:

(error)MISCONF Redis is configured to save RDB snapshots, but is currently

not able to persist on disk. Commands that may modify the data set

are disabled. Please check Redis logs for details about the error.

然后查看redis日志,出現了

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.


問題已經很清晰了,bgsave會fork一個子進程,因為vm.overcommit_memory = 0,所以申請的內存大小和父進程的一樣,由于redis已經使用了60%的內存空間,所以fork失敗

解決辦法:

/etc/sysctl.conf 添加 vm.overcommit_memory=1

sysctl ?vm.overcommit_memory=1

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 安全性 設置客戶端連接后進行任何其他指令前需要使用的密碼。 警告:因為redis 速度相當快,所以在一臺比較好的服...
    OzanShareing閱讀 1,952評論 1 7
  • =========================================================...
    lavor閱讀 3,661評論 0 5
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,724評論 19 139
  • 1.1 資料 ,最好的入門小冊子,可以先于一切文檔之前看,免費。 作者Antirez的博客,Antirez維護的R...
    JefferyLcm閱讀 17,329評論 1 51
  • 其實挺不喜歡寫日記的。 嗯,這么說好像也不太準確,應當還是因為自己性子散漫,難以堅持延續(xù),于是乎日...
    流星上的一粒塵土閱讀 359評論 0 0

友情鏈接更多精彩內容