標籤:影響 shared 晶片集 速度 臨時 叢集 交換分區 要求 swap空間
swap分區
通常memory是機器的實體記憶體,讀寫速度低於cpu一個量級,但是高於磁碟不止一個量級。所以,程式和資料如果在記憶體的話,會有非常快的讀寫速度。但是,記憶體的造價是要高於磁碟的,雖然相對來說價格一直在降低。除此之外,記憶體的斷電遺失資料也是一個原因說不能把所有資料和程式都儲存在記憶體中。既然不能全部使用記憶體,那資料還有程式肯定不可能一直霸佔在記憶體中。當記憶體沒有可用的,就必須要把記憶體中不經常啟動並執行程式給踢出去。但是踢到哪裡去,這時候swap就出現了。swap全稱為swap place,即交換區,當記憶體不夠的時候,被踢出的進程被暫時儲存到交換區。當需要這條被踢出的進程的時候,就從交換區重新載入到記憶體,否則它不會主動交換到真實記憶體中。
電腦對記憶體分為實體記憶體與虛擬記憶體(注意虛擬記憶體和虛擬位址空間的區別)。實體記憶體就是電腦的實際記憶體大小,由RAM晶片集成的。虛擬記憶體則是虛擬出來的、使用磁碟代替記憶體。虛擬記憶體的出現,讓機器記憶體不夠的情況得到部分解決。當程式運行起來由作業系統做具體虛擬記憶體到實體記憶體的替換和載入(相應的頁與段的虛擬記憶體管理)。這裡的虛擬記憶體即所謂的swap。
當使用者提交程式,然後產生進程,在機器上運行。機器會判斷當前實體記憶體是否還有空閑允許進程調入記憶體運行,如果有那麼則直接調入記憶體進行運行;如果沒有,那麼會根據優先順序選擇一個進程掛起,把該進程交換到swap中等待,然後把新的進程調入到記憶體中運行。根據這種換入和換出,實現了記憶體的迴圈利用,讓使用者感覺不到記憶體的限制。從這也可以看出swap扮演了一個非常重要的角色,就是暫存被換出的進程。記憶體與swap之間是按照記憶體頁為單位來交換資料的,一般Linux中頁的大小設定為4kb。而記憶體與磁碟則是按照塊來交換資料的。 那麼swap大小如何確定。根據centos官網介紹可以得出如下公式:M = Amount of RAM in GB, and S = Amount of swap in GB, then If M < 2, S = M *2 Else S = M + 2
調整swappiness參數
參考:53339991
swappiness的值的大小對如何使用swap分區是有著很大的聯絡的。swappiness=0的時候表示最大限度使用實體記憶體,然後才是 swap空間,swappiness=100的時候表示積極的使用swap分區,並且把記憶體上的資料及時的搬運到swap空間裡面。linux的基本預設設定為60,具體如下:
一般預設值都是60
[[email protected] ~]# cat /proc/sys/vm/swappiness
60
也就是說,你的記憶體在使用到100-60=40%的時候,就開始出現有交換分區的使用。這樣子會加大系統io,同時造的成大量頁的換進換出,嚴重影響系統的效能,所以我們在作業系統層面,要儘可能使用記憶體。
通過sysctl -q vm.swappiness可以查看參數的當前設定:
[[email protected] ~]$ sysctl -q vm.swappiness
vm.swappiness = 30
臨時調整的方法如下,我們調成10:
[[email protected] ~]# sysctl vm.swappiness=10
vm.swappiness = 10
[[email protected] ~]# cat /proc/sys/vm/swappiness
10
這隻是臨時調整的方法,重啟後會回到預設設定的
要想永久調整的話,需要將
需要在/etc/sysctl.conf修改,加上:
[[email protected] ~]# cat /etc/sysctl.conf
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
vm.swappiness=10
啟用設定
[[email protected] ~]# sysctl -p
在linux中,可以通過修改swappiness核心參數,降低系統對swap的使用,從而提高系統的效能。
大規模叢集要求swappiness核心參數調優