操做系統swap對redis的性能的影響以及解決方案

1、操做系統SWAP

swap是操做系統的行爲,是指當內存不足時,操做系統將內存的數據拿出一部分放入磁盤,數據從內存和磁盤換入換出的機制,涉及到磁盤的IO。一旦發生swap,內存對應的進程的性能都會受到影響,由於硬盤的訪問速度遠遠小於內存。redis

redis做爲內存數據庫,若是redis對應的內存發生了swap,那麼redis的性能會受到極大的影響。數據庫

2、Redis爲何會觸發swap

觸發swap的核心緣由是機器內存不足,對於redis來講有兩個緣由會觸發swap:性能

  1. redis自身佔用了大量內存,致使機器可用內存不足
  2. redis所在機器其餘進程佔用內存,致使內存不足。

3、查看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的內存壓力極大,會變慢,這個時候就須要解決這個問題。內存

4、解決Redis swap

最直接的辦法就是增大redis實例所在機器的內存部署

集羣部署的redis能夠經過增長實例個數,減小每一個實例所須要的內存。class

另一個辦法就是把redis單獨部署,不要和其餘應用程序一塊兒部署,這也是比較常規的實踐,同時也避免了cpu的競爭。

相關文章
相關標籤/搜索