服務器 交換分區(Swap) 設置


周末的時候HBase集群一台子節點宕機,查看Ganglia及內存使用情況,發現節點Swap空間耗盡,但奇怪的是,系統物理內存卻還是非常的富足。我們都知道

Swap空間的作用:

Swap空間的作用可簡單描述為:當系統的物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什么操作的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運行時,再從Swap中恢復保存的數據到內存中。這樣,系統總是在物理內存不夠時,才進行Swap交換。

Swap配置對性能的影響:

分配太多的Swap空間會浪費磁盤空間,而Swap空間太少,則系統會發生錯誤。 如果系統的物理內存用光了,系統就會跑得很慢,但仍能運行;如果Swap空間用光了,那么系統就會發生錯誤。例如,Web服務器能根據不同的請求數量衍生出多個服務進程(或線程),如果Swap空間用完,則服務進程無法啟動,通常會出現“application is out of memory”的錯誤,嚴重時會造成服務進程的死鎖。因此Swap空間的分配是很重要的。

那么,真的是當系統物理內存不夠用的時候,系統才會使用Swap空間嗎?否!他娘的。。。

其實虛擬內存並不是等到物理內存用盡了才使用的,是否盡量的使用或不使用swap在內核空間有一個參數控制。

cat /proc/sys/vm/swappiness
60

swappiness=0的時候表示最大限度使用物理內存,然后才是 swap空間,swappiness=100的時候表示積極的使用swap分區,並且把內存上的數據及時的搬運到swap空間里面。

對於現在動輒上百G物理內存的服務器來說,究竟為其Linux系統設置多大的交換分區合適呢,為此,引用紅帽官方文庫里的一段文字進行說明。

目前Red Hat推薦交換分區的大小應當與系統物理內存的大小保持線性比例關系。不過在小於2GB物理內存的系統中,交換分區大小應該設置為內存大小的兩倍,如果內存大小多於2GB,交換分區大小應該是物理內存大小加上2GB。其原因在於,系統中的物理內存越大,對於內存的負荷可能也越大。
但是,如果物理內存大小擴展到數百GB,這樣做就沒什么意義了。
實際上,系統中交換分區的大小並不取決於物理內存的量,而是取決於系統中內存的負荷。Red Hat Enterprise Linux 5可以在這樣的情況下工作:完全沒有交換分區,而且系統中匿名內存頁和共享內存頁小於3/4的物理內存量。在這種情況下,系統會將匿名內存頁和共享內存頁鎖定在物理內存中,而使用剩余的物理內存來緩沖文件系統數據(pagecache),當內存耗盡時,系統內核只會回收利用這些pagecache內存。
考慮到以下情況:
1)安裝系統時難以確定內存的負荷,如何設置交換分區大小
2)系統中物理內存越大,所需交換分區就會越少
因此,在Red Hat Enterprise Linux 5中,以下是設置合適的交換分區大小的規則:
小於等於4G物理內存的系統,至少設置2GB的交換分區
4G~16G物理內存的系統,至少設置4GB的交換分區
16G~64G物理內存的系統,至少設置8GB的交換分區
64G~256G物理內存的系統,至少設置16GB的交換分區

如何修改呢?

1.修改此處vm.swappiness=10,但是你會發現重啟后又變成60.

2.要徹底修改,還是要修改配置/etc/sysctl.conf
在這個文檔的最后加上這樣一行:
vm.swappiness=10
然后保存,重啟。ok,你的設置就生效了。

 

涉及到HBase來說,其在系統配置一節中,也有建議,可見,HBase建議設置swappiness為0,盡量使用物理內存:

 

 

==================================

查看修改swap

==================================

1  查看swap 空間大小(總計): 
# free -m          默認單位為k, -m 單位為M
               total       used       free     shared    buffers     cached
Mem:           377         180        197        0         19        110
-/+ buffers/cache:         50         327
Swap:          572          0         572

2  查看swap 空間(file(s)/partition(s)):

   包括 文件 和 分區的詳細信息

# swapon -s
等價於

# cat /proc/swaps


3.在空間合適處創建swap文件

  1. [root@ema usr]# cd swap  
  2. [root@ema swap]# dd if=/dev/zero of=swapfile bs=402400 count=10000  
  3. 10000+ records in  
  4. 10000+ records out  
  5. [root@ema swap]# ls -al  
  6. total 10024  
  7. drwxr-xr-x    2 root     root         4096    
  8. drwxr-xr-x   19 root     root         4096    
  9. -rw-r--r--    1 root     root     4013500000  
  10. [root@emaswap]# mkswap swapfile 
  11. 激活swap文件

swapon swapfile  

total       used       free     shared    buffers     cached  

Mem:          202619299771755

-/+ buffers/cache:        1661860

Swap:         40084008

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM