redis為什么會(huì)出現(xiàn)阻塞?可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
十年專注成都網(wǎng)站制作,企業(yè)網(wǎng)站制作,個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站制作,高端網(wǎng)頁(yè)制作,對(duì)成都邊坡防護(hù)網(wǎng)等多個(gè)方面,擁有豐富的網(wǎng)站運(yùn)維經(jīng)驗(yàn)。
發(fā)現(xiàn)阻塞
線上應(yīng)用服務(wù)最先感知到,可在應(yīng)用方加入異常統(tǒng)計(jì)并通過(guò)郵件、短信、微信報(bào)警。
借助日志系統(tǒng),統(tǒng)計(jì)異常和觸發(fā)報(bào)警邏輯
借助Redis監(jiān)控系統(tǒng)發(fā)現(xiàn)阻塞問(wèn)題,觸發(fā)報(bào)警。推薦CacheCloud系統(tǒng)。
內(nèi)在原因
API或數(shù)據(jù)結(jié)構(gòu)使用不合理
對(duì)于高并發(fā)場(chǎng)景,避免在大對(duì)象上執(zhí)行算法復(fù)雜度超過(guò)O(n)O(n)的命令。
發(fā)現(xiàn)慢查詢:slowlog get {n}
發(fā)現(xiàn)大對(duì)象:redis-cli -h{ip} -p{port} bigkeys
CPU飽和
CPU飽和指redis把單核CPU跑到100%。
top命令查看redis進(jìn)程CPU使用率
redis-cli -h{ip} -p{port} –stat獲取當(dāng)前redis使用情況,判斷并發(fā)是否達(dá)到極限
info commandstats 分析命令不合理開銷時(shí)間,可能過(guò)度內(nèi)存優(yōu)化
持久化阻塞
1、fork阻塞
發(fā)生在RDB或AOF重寫時(shí),redis主線程調(diào)用fork產(chǎn)生子進(jìn)程完成持久化文件重寫
使用info stats命令獲取lastest_fork_usec指標(biāo),表示redis最近一次fork操作耗時(shí)
2、AOF刷盤阻塞
開啟AOF,文件刷盤一般每秒一次,硬盤壓力過(guò)大時(shí),fsync需要等待寫入完成
查看redis日志或info persistence統(tǒng)計(jì)中的aof_delayed_fsync指標(biāo)
可使用iotop差可能哪個(gè)進(jìn)程消耗過(guò)多的硬盤資源
3、HugePage寫操作阻塞
對(duì)于開啟Transparent HugePages的操作系統(tǒng),每次寫命令引起的復(fù)制內(nèi)存頁(yè)單位由4KB變?yōu)?MB
會(huì)拖慢寫操作的執(zhí)行時(shí)間,導(dǎo)致大量寫操作慢查詢
外在原因
CPU競(jìng)爭(zhēng)
1、進(jìn)程競(jìng)爭(zhēng):redis是典型的CPU密集型應(yīng)用。使用top、sar命令定位CPU消耗的時(shí)間點(diǎn)和進(jìn)程
2、綁定CPU:常見優(yōu)化是把redis進(jìn)程綁定到CPU上,較低CPU上下文切換開銷,如果fork子進(jìn)程做了CPU綁定,則父子進(jìn)程存在激烈的CPU競(jìng)爭(zhēng),極大影響redis穩(wěn)定性。
內(nèi)存交換
如果操作系統(tǒng)把redis使用的內(nèi)存換出到硬盤上,會(huì)導(dǎo)致發(fā)生交換后的redis性能急劇下降。
識(shí)別redis內(nèi)存交換的檢查方法:
1、查詢r(jià)edis進(jìn)程號(hào)
redis-cli info server | grep process_id
2、根據(jù)進(jìn)程號(hào)查詢內(nèi)存交換信息
cat /proc/{process_id}/smaps | grep Swap
如果交換量都是0KB或者個(gè)別4KB,是正?,F(xiàn)象。
預(yù)防內(nèi)存交換:
1、保證機(jī)器充足的可用內(nèi)存
2、確保所有redis示例設(shè)置最大可用內(nèi)存(maxmemory),防止極端情況下redis內(nèi)存不可控的增長(zhǎng)
3、降低系統(tǒng)使用swap優(yōu)先級(jí),如 echo 10>/proc/sys/vm/swappiness
網(wǎng)絡(luò)問(wèn)題
1、連接拒絕
網(wǎng)絡(luò)閃斷:一般在網(wǎng)絡(luò)割接或帶寬耗盡的情況
redis連接拒絕:
連接數(shù)大于maxclients時(shí)拒絕新的連接進(jìn)入,info stats的rejected_connections指標(biāo)
客戶端訪問(wèn)redis盡量采用NIO長(zhǎng)連接或連接池的方式
redis用于大量分布式節(jié)點(diǎn)訪問(wèn)且生命周期較短的場(chǎng)景(如Map/Reduce)時(shí),建議設(shè)置tcp-keepalive和timeout參數(shù)讓redis主動(dòng)檢查和關(guān)閉無(wú)效連接
連接溢出:
進(jìn)程限制:進(jìn)程可打開最大文件數(shù)控制,ulimit -n,通常1024,大量連接的redis需要增大該值
backlog隊(duì)列溢出:系統(tǒng)對(duì)于特定端口tcp連接使用backlog隊(duì)列保存,redis默認(rèn)511,系統(tǒng)backlog默認(rèn)128,線上可使用cron定時(shí)執(zhí)行netstat -s | grep overflowed統(tǒng)計(jì)
2、網(wǎng)絡(luò)延遲
測(cè)量機(jī)器之間網(wǎng)絡(luò)延遲
redis-cli -h{ip} -p{port} –latency redis-cli -h{ip} -p{port} –latency-history 默認(rèn)15秒完成一行統(tǒng)計(jì),-i控制采樣時(shí)間 redis-cli -h{ip} -p{port} –latency-dist 統(tǒng)計(jì)圖展示,每1秒采樣一次
3、網(wǎng)卡軟中斷
單個(gè)網(wǎng)卡隊(duì)列只能使用一個(gè)CPU,高并發(fā)下網(wǎng)卡數(shù)據(jù)交互都集中在同一個(gè)CPU,導(dǎo)致無(wú)法充分利用多核CPU的情況。
一般出現(xiàn)在網(wǎng)絡(luò)高流量吞吐的場(chǎng)景
關(guān)于Redis出現(xiàn)阻塞的原因就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。章!
本文標(biāo)題:Redis為什么會(huì)出現(xiàn)阻塞
網(wǎng)頁(yè)鏈接:http://aaarwkj.com/article20/psosjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)站策劃、軟件開發(fā)、靜態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)