<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          記一次線上Redis高負載排查經(jīng)歷

          共 2267字,需瀏覽 5分鐘

           ·

          2021-02-17 16:05


          點擊上方?藍字?關(guān)注我們!



          Java,Python,C/C++,Linux,PHP,Go,C#,QT,大數(shù)據(jù),算法,軟件教程,前端,簡歷,畢業(yè)設(shè)計等分類,資源在不斷更新中... 點擊領(lǐng)取

          每天 11 點更新文章,餓了點外賣,點擊 ??《無門檻外賣優(yōu)惠券,每天免費領(lǐng)!》


          周一早上剛上班,突然大量用戶反饋進入網(wǎng)頁很慢,登錄服務(wù)器一看,Redis調(diào)用時間嚴重超時,這樣高速的緩存反而變成了短板,由于數(shù)據(jù)一直沒有返回,導(dǎo)致了請求響應(yīng)變慢。

          網(wǎng)頁監(jiān)控

          通過阿里的 Grafana 監(jiān)控,服務(wù)器的 CPU 負載、內(nèi)存、網(wǎng)絡(luò)輸入輸出都挺正常的,所以肯定是 Redis 出現(xiàn)了問題。

          我們應(yīng)用使用的是單節(jié)點的 32M 16GB 的阿里云 Redis,登錄網(wǎng)頁監(jiān)控看性能監(jiān)控,發(fā)現(xiàn) CPU 使用情況飆升到100%!!!

          QPS 雖然從 1000 多升到 6000,但是遠遠低于極限值,連接數(shù)量從 0 升到 3000,也是遠遠低于極限值(可能用戶剛上班,開始有請求,然后響應(yīng)延遲,導(dǎo)致命令隊列數(shù)量過多,打開很多連接)。

          臨時方案:先租用一臺新的 Redis 服務(wù)器,更換應(yīng)用服務(wù)器的 Redis 配置,重啟應(yīng)用,避免影響更多用戶。

          然后我們繼續(xù)跟蹤 Redis 的具體情況。


          服務(wù)器命令監(jiān)控

          登錄 Redis-cli,通過 info 命令查看服務(wù)器狀態(tài)和命令統(tǒng)計,祥哥總結(jié)了兩點異常點:

          • 查詢 redis 慢指令 slowlog,排行前十的指令均為’keys _‘,并且耗時嚴重,在當前業(yè)務(wù)流量下執(zhí)行’keys _‘,一定會阻塞業(yè)務(wù),導(dǎo)致查詢慢,cpu 高的。值得注意的是應(yīng)用層面沒有開放 ‘keys *’ 接口,不排查有后臺人為或后臺程序觸發(fā)該指令。

          • 查看 redis 指令執(zhí)行情況,排除 ‘exec’,’flushall’ 等指令,業(yè)務(wù)使用指令中,耗時嚴重的有 setnx 有7.5千萬次調(diào)用平均耗時 6s,setex 有8.4千萬次調(diào)用平均耗時7.33s,del 有2.6億次調(diào)用平均耗時69s,hmset 有1億次調(diào)用平均耗時 64s,hmget 有6.8千萬次調(diào)用平均耗時 9s,hgetall 有14億次調(diào)用平均耗時 205s,keys 有2千萬次調(diào)用平均耗時 3740s。

          通常而言,這些指令耗時與 value 大小呈正比,所以可以排查這些指令相關(guān)的數(shù)據(jù)近期有沒有較大增長。或者近期有沒有業(yè)務(wù)改造,會頻繁使用上述指令,也會造成 cpu 高。

          (當時忘了截圖,下圖只是展示命令和參數(shù)含義)

          通過 info commandstats 可以查看 Redis 命令統(tǒng)計信息,其中命令格式是

          cmdstat_XXX:?calls=XXX,usec=XXX,usec_per_call=XXX

          調(diào)用次數(shù)、耗費CPU時間、每個命令平均耗費CPU(單位為微秒)

          通過 slowlog 命令查看慢命令(默認超過 10ms 就會被記錄到日志,只會記錄其命令執(zhí)行的時間,不包含 IO 往返操作,也不記錄單由網(wǎng)絡(luò)延遲引起的響應(yīng)慢)

          (當時也忘了截圖,所以就介紹一下 slowlog 怎么看)

          xxxxx> slowlog get 10
          3) 1) (integer) 411
          2) (integer) 1545386469
          3) (integer) 232663
          4) 1) "keys"
          2) "mecury:*"

          圖中各字段表示的是:

          • 1=日志的唯一標識符

          • 2=命令的執(zhí)行時間點,以UNIX時間戳表示

          • 3=查詢命令執(zhí)行時間,以微妙為單位,??中的是230ms

          • 4=執(zhí)行的命令,以數(shù)組的形式排列。完整的命令是 keys mucury:*

          所以通過這些參數(shù),基本可以確定,是突然有大量的keys *命令導(dǎo)致CPU負載升高,導(dǎo)致響應(yīng)延遲,問題我們應(yīng)用中沒有開放keys *命令Σ(o?д?o?)

          最后將這些統(tǒng)計結(jié)果和慢命令發(fā)到研發(fā)群,發(fā)現(xiàn)是別的應(yīng)用配置配成了我們的Redis,然后他們有個業(yè)務(wù)場景是爬數(shù)據(jù),突然涌入大量的調(diào)用,不斷的keys *,導(dǎo)致我們的Redis不堪重負,于是將配置修改正確,不再調(diào)用我們的Redis。


          總結(jié)

          • Redis 抖動可以先看網(wǎng)頁監(jiān)控(阿里云做的真好!)

          • 通過命令查看 Redis 指令狀態(tài)和慢命令的情況

          • 考慮優(yōu)化 Redis 在代碼中的使用情況

          • 如果流量繼續(xù)上升,需要考慮一下升級了=-=


          往期推薦

          這簡歷一看就是包裝過的

          4 大軟件架構(gòu),你們公司用哪種?

          人人影視涼了!春節(jié)如何刷片?

          我的異常消失在 Spring 的雙層事務(wù)中

          看完文章,餓了點外賣,點擊 ??《無門檻外賣優(yōu)惠券,每天免費領(lǐng)!》

          END



          若覺得文章對你有幫助,隨手轉(zhuǎn)發(fā)分享,也是我們繼續(xù)更新的動力。


          長按二維碼,掃掃關(guān)注哦

          ?「C語言中文網(wǎng)」官方公眾號,關(guān)注手機閱讀教程??


          必備編程學(xué)習資料


          目前收集的資料包括:?Java,Python,C/C++,Linux,PHP,go,C#,QT,git/svn,人工智能,大數(shù)據(jù),單片機,算法,小程序,易語言,安卓,ios,PPT,軟件教程,前端,軟件測試,簡歷,畢業(yè)設(shè)計,公開課?等分類,資源在不斷更新中...


          點擊“閱讀原文”,立即免費領(lǐng)取最新資料!
          ??????
          瀏覽 51
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99精品视频在线免费观看 | 一级黄色免费看 | 日韩成人在线视频 | 操骚逼自拍 | 国产精品高潮呻吟视频 |