使用Swap
如果你發(fā)現(xiàn)Redis突然變得非常慢虏肾,每次訪問(wèn)的耗時(shí)都達(dá)到了幾百毫秒甚至秒級(jí)廓啊,那此時(shí)就檢查Redis是否使用到了Swap,這種情況下Redis基本上已經(jīng)無(wú)法提供高性能的服務(wù)封豪。
我們知道谴轮,操作系統(tǒng)提供了Swap機(jī)制,目的是為了當(dāng)內(nèi)存不足時(shí)吹埠,可以把一部分內(nèi)存中的數(shù)據(jù)換到磁盤(pán)上第步,以達(dá)到對(duì)內(nèi)存使用的緩沖疮装。
但當(dāng)內(nèi)存中的數(shù)據(jù)被換到磁盤(pán)上后,訪問(wèn)這些數(shù)據(jù)就需要從磁盤(pán)中讀取粘都,這個(gè)速度要比內(nèi)存慢太多廓推!
尤其是針對(duì)Redis這種高性能的內(nèi)存數(shù)據(jù)庫(kù)來(lái)說(shuō),如果Redis中的內(nèi)存被換到磁盤(pán)上翩隧,對(duì)于Redis這種性能極其敏感的數(shù)據(jù)庫(kù)樊展,這個(gè)操作時(shí)間是無(wú)法接受的。
我們需要檢查機(jī)器的內(nèi)存使用情況堆生,確認(rèn)是否確實(shí)是因?yàn)閮?nèi)存不足導(dǎo)致使用到了Swap专缠。
如果確實(shí)使用到了Swap,要及時(shí)整理內(nèi)存空間淑仆,釋放出足夠的內(nèi)存供Redis使用藤肢,然后釋放Redis的Swap,讓Redis重新使用內(nèi)存糯景。
釋放Redis的Swap過(guò)程通常要重啟實(shí)例嘁圈,為了避免重啟實(shí)例對(duì)業(yè)務(wù)的影響,一般先進(jìn)行主從切換蟀淮,然后釋放舊主節(jié)點(diǎn)的Swap最住,重新啟動(dòng)服務(wù),待數(shù)據(jù)同步完成后怠惶,再切換回主節(jié)點(diǎn)即可涨缚。
可見(jiàn),當(dāng)Redis使用到Swap后策治,此時(shí)的Redis的高性能基本被廢掉脓魏,所以我們需要提前預(yù)防這種情況。
我們需要對(duì)Redis機(jī)器的內(nèi)存和Swap使用情況進(jìn)行監(jiān)控通惫,在內(nèi)存不足和使用到Swap時(shí)及時(shí)報(bào)警出來(lái)茂翔,及時(shí)進(jìn)行相應(yīng)的處理。