swap是操做系統的行爲,是指當內存不足時,操做系統將內存的數據拿出一部分放入磁盤,數據從內存和磁盤換入換出的機制,涉及到磁盤的IO。一旦發生swap,內存對應的進程的性能都會受到影響,由於硬盤的訪問速度遠遠小於內存。redis
redis做爲內存數據庫,若是redis對應的內存發生了swap,那麼redis的性能會受到極大的影響。數據庫
觸發swap的核心緣由是機器內存不足,對於redis來講有兩個緣由會觸發swap:性能
查找redis對應的進程id操作系統
src/redis-cli info | grep process_id
進入redis對應的進程目錄code
cd /proc/5910
查看swapblog
cat smaps | egrep '^(Swap|Size)'
上圖中size表明redis實例佔用的一塊內存空間,都有一個對應的Swap,swap的大小表明該內存空間區域有多少已經被換到硬盤了,若是size和swap相等,則表明已經所有被換到了內存空間。進程
若是出現幾百MB設置GB級別的swap時,說明redis的內存壓力極大,會變慢,這個時候就須要解決這個問題。內存
最直接的辦法就是增大redis實例所在機器的內存。部署
集羣部署的redis能夠經過增長實例個數,減小每一個實例所須要的內存。class
另一個辦法就是把redis單獨部署,不要和其餘應用程序一塊兒部署,這也是比較常規的實踐,同時也避免了cpu的競爭。