記一次生產環境獲取不到redis連線問題排查

2021-08-22 16:15:29 字數 1900 閱讀 4428

最近線上環境總是不穩定,用著用著就會出現獲取不到redis連線的情況,檢視redis伺服器端配置,發現連線數不是很多,那麼為什麼又會出現如此情況呢?

首先檢視redis服務端的配置

## 通過redis-cli連線到redis伺服器

redis-cli -h 127.0

.0.1 -p 6379 -a 密碼

##獲取客戶端資訊

info clients

## 輸出資訊,可以檢視客戶端連線數

connected_clients:19

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

## 檢視服務端空閒時間(空閒時間超過這個時間服務端會斷開連線,預設服務端是不會主動斷開連線的)

config timeout

## 檢視服務端總連線數

config maxclients

發現服務端各方面連線數都很正常,那麼為什麼客戶端又經常報獲取不到連線的異常呢
回顧一下專案,專案用的技術棧主要 springmvc + mybatis + spring cache + shiro ,會大量用到redis的地方乙個是shiro的sesion操作,另乙個就是spring cache的cache操作

在本地先把redis的最大,最小空閒連線數設為20,總連線數設為50
大量操作會通過spring cache處理的介面,檢視redis服務端連線,發現連線數很快會佔滿到最大的連線數,然後沒過一會客戶端開始報獲取不到連線錯誤

思考,是本地連線沒有及時釋放的原因嗎?ok,調整連線池的配置引數
jedispoolconfig jedispoolconfig = new jedispoolconfig();

//總連線數 50

jedispoolconfig.setmaxtotal(maxtotal);

//最大等待時間(毫秒)

jedispoolconfig.setmaxwaitmillis(maxwaitmillis);

//最大空閒連線數

jedispoolconfig.setmaxidle(maxidle);

//最小空閒連線數

jedispoolconfig.setminidle(minidle);

//釋放連線的掃瞄間隔(毫秒)

jedispoolconfig.settimebetweenevictionrunsmillis(10);

//連線空閒多久後釋放(毫秒),

jedispoolconfig.setsoftminevictableidletimemillis(100);

//拿到連線的時候是否進行校驗操作

jedispoolconfig.settestonborrow(true);

//連線歸還池進行校驗

jedispoolconfig.settestonreturn(true);

//自動測試池中的空閒連線都是可用

jedispoolconfig.settestwhileidle(true);

//每次釋放連線的最大數目

jedispoolconfig.setnumtestsperevictionrun(10);

對連線池做以上配置,再進行測試,發現同樣的問題還是存在,思考,進行了上述配置後為什麼連線還是沒有斷開?難道連線洩露了?考慮到本專案是通過jedis來操作redis的,jedis獲取redis連線,用完後需要呼叫close來歸還連線,難道是沒有歸還連線?

檢視所有呼叫jedis的地方,發現操作session的時候拿了連線之後並沒有歸還,ok,修復該問題,再進行壓測,一切正常。

記一次生產報too man open files

有一天私有雲無法訪問,馬上聯絡廠商,最後廠商發現好多容器不停重啟,經過日誌檢視發現平台開啟檔案控制代碼太多,很奇怪,就開始排查,最後發現乙個埠,定位到應用spring actuator.這個應用是我為了監控微服務而發布的乙個監控應用,馬上看日誌,發現應用報錯,too many open files,...

記一次生產環境thrift服務的配置問題

問題現象 有客戶反饋我們的產品有時反應很慢,處理會出現超時。問題分析過程 1.第一反應可能是使用者增加,併發量太大了,詢問了運營,最近使用者註冊資料並沒有猛增。2.分析access日誌,發現有隔一段時間會出現幾個連續的請求響應時長超過30秒,並且這些請求都是使用乙個thrift服務的,而連redis...

記一次生產故障,nginx503

問題概述 web頁面進行login操作,控制台報503 系統版本 centos 6.8 服務架構 前端兩個nginx 伺服器,可外網,中間兩台業務伺服器,使用docker起兩組服務 後端3臺redis 哨兵 和三颱mongo 問題分析 由控制台報503可知是伺服器內部原因,可能是網路或者服務方面。解...