周末的時候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文件
- [root@ema usr]# cd swap
- [root@ema swap]# dd if=/dev/zero of=swapfile bs=402400 count=10000
- 10000+ records in
- 10000+ records out
- [root@ema swap]# ls -al
- total 10024
- drwxr-xr-x 2 root root 4096
- drwxr-xr-x 19 root root 4096
- -rw-r--r-- 1 root root 4013500000
- [root@emaswap]# mkswap swapfile
- 激活swap文件
swapon swapfile
total used free shared buffers cached
Mem: 202619299771755
-/+ buffers/cache: 1661860
Swap: 40084008
