背景
有一次發(fā)現(xiàn)線上業(yè)務(wù)突然告警兵琳,有不少接口失敗率暴增躯肌。看了下錯誤碼和日志清女,提示這個dial tcp [IP]:PORT: connect: cannot assign requested address,大概就可以確定是redis連接問題拴袭。
原因
在網(wǎng)上查了下曙博,發(fā)現(xiàn)這個是Linux上分配的客戶端連接端口用盡,無法建立socket連接所致般哼,雖然socket已經(jīng)關(guān)閉了惠窄,但端口不是立刻釋放的。項(xiàng)目中訪問redis用了連接池杆融,但線上的空閑最大連接數(shù)有問題,設(shè)置太小了蒋腮。但線上訪問請求量不低,就會導(dǎo)致每時(shí)每刻有不少redis連接池摧,但又無法放回連接池內(nèi)被釋放掉险绘,但釋放又有時(shí)間延遲誉碴,然后下一秒又有繼續(xù)大量請求,這樣隨著時(shí)間的增長黔帕,機(jī)器的可用端口就會出現(xiàn)用盡的情況
解決
直接提高連接池的空閑最大連接數(shù)成黄。
也可以考慮修改Linux端口關(guān)閉的延遲時(shí)間,不過這不是本質(zhì)原因奋岁。
歡迎關(guān)注個人公眾號: 極客星語,定時(shí)更新技術(shù)文章滨攻!
極客星語