1. 程式人生 > >ubuntu實體記憶體不足,磁碟空間轉換虛擬記憶體

ubuntu實體記憶體不足,磁碟空間轉換虛擬記憶體

終端輸入free -m可以查到如下資訊: [html] view plain copy print?
  1.              total       used       free     shared    buffers     cached  
  2. Mem:          1944       1801        143          0        557        706  
  3. -/+ buffers/cache:        536       1407  
  4. Swap:          255          7        248  

也即記憶體為2G,虛擬記憶體為256M,這太小了尤其是編譯android原始碼的時候。因此將其增加到1G大小。具體步驟是:

1,新建/swap資料夾。然後cd進去,終端輸入:sudo dd if=/dev/zero of=swapfile bs=1024 count=1000000

[html] view plain copy print?
  1. sudo dd if=/dev/zero of=swapfilebs=1024count=<spanstyle="font-size:18px;">1</span>000000  

最後的count就是虛擬記憶體的大小,後面有6個0,前面是1,表示1G. 坑爹的文件http://www.hx95.com/Article/Tech/201205/55661.html後面只有5個0還說表示1G. 稍等約1分鐘看到如下資訊:
[html] view plain copy print?
  1. 記錄了1000000+0 的讀入  
  2. 記錄了1000000+0 的寫出  
  3. 1024000000位元組(1.0 GB)已複製,27.2124 秒,37.6 MB/秒  

2,這個時候在swap目錄下就生成了swapfile檔案。終端輸入:du -h swapfile 可以檢視生成的檔案swapfile大小為977M. [html] view plain copy print?
  1. [email protected]:/swap$ du -h swapfile   
  2. 977M    swapfile  
約等於1G.

     接下來需要將swapfile轉換成Swap檔案,終端輸入:sudo mkswap -f  swapfile  (mkswap是命令,後面的swapfile是swap資料夾下新生成的檔名字)

[html] view plain copy print?
  1. [email protected]:/swap$ sudo mkswap -f swapfile  
  2. Setting up swapspace version 1, size = 999996 KiB  
  3. no label, UUID=a1363520-df39-4cdf-9e99-198fdf1eb17c  

3,啟用swap檔案

     終端輸入:sudo swapon swapfile(swapon是命令,swapfile是檔案名字

然後再輸入 free -m可以看到:

[html] view plain copy print?
  1. [email protected]:/swap$ free -m  
  2.              total       used       free     shared    buffers     cached  
  3. Mem:          1944       1808        135          0        511        758  
  4. -/+ buffers/cache:        538       1405  
  5. Swap:         1232          7       1224  

Swap的大小1232 = 255(原來的) + 977 (新增加的)

      如果要修改或者刪除這個swapfile檔案,需要先解除安裝這個swapfile。進入到swap目錄,然後終端輸入:sudo sawpoff swapfile,這就解除安裝了。swapfile檔案就可以刪除了,否則會提示正在使用或忙 無法刪除。

如果要一直保持這個新增的swap,通過切換到root,gedit /etc/fstab, 在裡面增加一句:/swap/swapfile none swap defaults 0 0 。關於這句話,參考1的命令是/swap/swapfile none swap defaults 0 0,參考2的命令/swap/swapfile /swap swap defaults 0 0。個人覺的第二個引數表示原來系統的swap資料夾,如果原系統沒有swap資料夾,則用參考1裡的命令。如果原系統本來就有/swap檔案夾了,也即本來就有swap空間然後又新增加了一個,就用參考2的命令。 Ubuntu12.04上原本沒有/swap資料夾,因此用參考1的命令。

參考:1,http://blog.csdn.net/mznewfacer/article/details/7334592

           2,http://www.linuxidc.com/Linux/2010-09/28915.htm

         另外,注意上面新建swap使用後,現有swap是兩者之和。http://www.blogjava.net/zygcs/archive/2011/09/02/357845.html這裡的方法大同小異,只不過是先cd /host/ubuntu/disks/  可以看到有個swap.disk, 利用du -h swap.disk檢視大小為255M,然後sudo swapoff swap.disk取消使用這個系統自帶的交換空間。然後刪除掉,通過以下步驟:

4. sudo dd if=/dev/zero of=swap.disk bs=1M count=1k (建立1G的swap, 這步比較慢)
5. sudo mkswap -f swap.disk
6. sudo swapon /host/ubuntu/disks/swap.disk (這步更慢,大概1分鐘不到)

這是在/host/ubuntu/disks/目錄下建立的,名字為swap.disk. 本質是一樣的。 再就是建立swap時大小是bs*count,如果bs=1M 則count =1k表示1G,如果bs=1024, count=1000000 表示1G,我覺的前者更精確

       接下來是優化swap的使用引數,linux裡有個引數swappiness。當值為0時最大限度的使用實體記憶體,實體記憶體使用完後再使用swap記憶體。為100時,最大限度的使用swap,並將記憶體中的資料也要搬到swap裡處理,這是兩個極端。預設的引數是60,根據這裡將其改為10較優。步驟如下:

1,檢視當前的swappiness

終端輸入:cat  /proc/sys/vm/swappiness

2.修改swappiness值為10
$ sudo sysctl vm.swappiness=10
但是這只是臨時性的修改,在你重啟系統後會恢復預設的60,所以,還要做一步:
$ sudo gedit /etc/sysctl.conf
在這個文件的最後加上這樣一行:
vm.swappiness=10
然後儲存,重啟。ok,你的設定就生效了。