一次redis集群連接數(shù)占滿問題的排查

現(xiàn)象

某系統(tǒng)的tomcat薇正,收不到上游系統(tǒng)請(qǐng)求很澄,日志停止不滾動(dòng),進(jìn)程還存活(俗稱的tomcat假死)筹麸。

分析排查

應(yīng)用排查

  1. 登錄應(yīng)用jstack -l pid > jstack.txt枫夺,查看堆棧信息将宪,發(fā)現(xiàn)大量的連redis集群的BLOCKED信息:
"http-nio-9080-exec-200" #287 daemon prio=5 os_prio=0 tid=0x00002aaad4716800 nid=0x47db waiting for monitor entry [0x000000005287e000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at redis.clients.jedis.JedisClusterInfoCache.getSlotPool(JedisClusterInfoCache.java:151)
    - waiting to lock <0x0000000648ecf770> (a redis.clients.jedis.JedisClusterInfoCache)
    at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnectionFromSlot(JedisSlotBasedConnectionHandler.java:54)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:47)
    at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:32)
    at redis.clients.jedis.JedisCluster.get(JedisCluster.java:97)
  1. 登錄監(jiān)控平臺(tái),發(fā)現(xiàn)一個(gè)redis節(jié)點(diǎn)已經(jīng)監(jiān)控不到。在應(yīng)用上telnet該節(jié)點(diǎn)较坛,返回超過最大連接數(shù)印蔗。于是基本定位故障:某redis節(jié)點(diǎn)超過最大連接數(shù),導(dǎo)致無法訪問丑勤。
redis監(jiān)控.png

分析問題

應(yīng)用程序

  1. 應(yīng)用程序在生成流水號(hào)時(shí)华嘹,強(qiáng)依賴redis,沒有做降級(jí)方案法竞。
  2. 應(yīng)用端jedispool設(shè)置了連接超時(shí)時(shí)間耙厚,但是過大,造成請(qǐng)求阻塞岔霸。
  3. 此redis集群為公用集群薛躬,至少有60個(gè)子系統(tǒng)在使用,每個(gè)子系統(tǒng)都有設(shè)置了最大連接數(shù)呆细,理論上型宝,是不會(huì)超出10000的。

redis集群排查

  1. 登錄redis-cli(redis版本3.0.6)絮爷,list連接清單趴酣,發(fā)現(xiàn)了某應(yīng)用集群有大量的連接,并處于establish狀態(tài)坑夯,斷定來源IP為問題應(yīng)用岖寞,并且應(yīng)用使用了redis的發(fā)布訂閱功能:subscribe。
連接信息.png
  1. 登錄問題應(yīng)用服務(wù)器柜蜈,使用netstat查看未發(fā)現(xiàn)到redis服務(wù)器的連接仗谆。由此定位問題為redis連接未及時(shí)釋放。

長連接問題排查

  1. 查看網(wǎng)絡(luò)拓?fù)錇閼?yīng)用->防火墻->redis跨释。登錄防火墻胸私,連接數(shù)依然為0-1個(gè)厌处,確認(rèn)問題為redis未及時(shí)回收連接鳖谈。
  2. 查看操作系統(tǒng)tcp keepalive設(shè)置為7200s(2小時(shí)),未生效阔涉,推測此配置被redis配置覆蓋缆娃。(在測試環(huán)境使用相同配置,進(jìn)行tcpdump抓包測試瑰排,確認(rèn)無誤贯要。)
  3. 查看redis配置tcp_keepalive為0,代表關(guān)閉tcp連接狀態(tài)檢查椭住,與現(xiàn)象一致崇渗。
  4. 查看防火墻長連接配置為30分鐘無流量主動(dòng)斷開連接,與現(xiàn)象一致。

結(jié)論

  1. 應(yīng)用與redis之間有jupiter防火墻宅广,防火墻30分鐘無數(shù)據(jù)通信葫掉,會(huì)拆連接,拆的時(shí)候不會(huì)通知兩端回收連接跟狱。
  2. redis-server設(shè)置了keepalive=0俭厚,此配置覆蓋了操作系統(tǒng)的keepalive=7200s,導(dǎo)致redis-server不主動(dòng)檢測連接狀態(tài)驶臊,所以不會(huì)主動(dòng)回收連接挪挤。
  3. 客戶端應(yīng)該是jvm有默認(rèn)設(shè)置,或者走了操作系統(tǒng)的配置(待驗(yàn)證)关翎,所以客戶端機(jī)器上可以正晨该牛回收連接。

解決方案

  1. redis設(shè)置tcp_keepalive=60s
  2. 應(yīng)用程序jedispool設(shè)置連接檢測纵寝。

核心技術(shù)原理與知識(shí)點(diǎn)

相關(guān)場景建議

  • 所有redis集群對(duì)tcp_keepalive配置進(jìn)行review尖飞,保證連接可主動(dòng)回收
  • 所有使用tcp長連接的通信方式(Oracle,Mysql,Redis,MQ等),CS兩端應(yīng)配置合理tcp keepalive時(shí)間店雅,嚴(yán)謹(jǐn)配置為0政基,C端應(yīng)提供重連機(jī)制。
  • 發(fā)布訂閱的功能闹啦,建議使用rabbitmq等實(shí)現(xiàn)沮明,redis還是搞緩存吧
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市窍奋,隨后出現(xiàn)的幾起案子荐健,更是在濱河造成了極大的恐慌,老刑警劉巖琳袄,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件江场,死亡現(xiàn)場離奇詭異,居然都是意外死亡窖逗,警方通過查閱死者的電腦和手機(jī)址否,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碎紊,“玉大人佑附,你說我怎么就攤上這事≌炭迹” “怎么了音同?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長秃嗜。 經(jīng)常有香客問我权均,道長顿膨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任叽赊,我火速辦了婚禮虽惭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛇尚。我一直安慰自己芽唇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布取劫。 她就那樣靜靜地躺著匆笤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谱邪。 梳的紋絲不亂的頭發(fā)上炮捧,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音惦银,去河邊找鬼咆课。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扯俱,可吹牛的內(nèi)容都是我干的书蚪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼迅栅,長吁一口氣:“原來是場噩夢啊……” “哼殊校!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起读存,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤为流,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后让簿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敬察,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年尔当,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莲祸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡居凶,死狀恐怖虫给,靈堂內(nèi)的尸體忽然破棺而出藤抡,到底是詐尸還是另有隱情侠碧,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布缠黍,位于F島的核電站弄兜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜替饿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一语泽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧视卢,春花似錦踱卵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绳锅,卻和暖如春西饵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鳞芙。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工眷柔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人原朝。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓驯嘱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親喳坠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宙拉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容