Linux環境下Swap配置方法

realkid4發表於2013-10-11

Unix/Linux環境下,Swap是比較重要的空間配置內容。Swap出現的背景源於對實體記憶體的使用特性。相對於外儲存器(硬碟)而言,記憶體速度具有很強的優勢。但是,出於經濟方面和技術方面的一些原因,實體記憶體在過去一個時期內,一直是比較“稀缺”的資源。

 

對作業系統而言,如果存在實體記憶體不足的情況,通常使用硬碟空間進行彌補,這也就是我們常看到的虛擬記憶體技術。Window環境中,我們稱為虛擬記憶體。在Unix/Linux環境中,也就是Swap空間。

 

我們非常熟悉一個經典的Swap設定規則:如果實體記憶體大小小於2G,設定的Swap分割槽大小為實體記憶體的兩倍。如果實體記憶體大小大於等於2G,可以考慮設定Swap分割槽等於實體記憶體或者1.5倍記憶體大小。

 

從效能上看,Swap是不能和實體記憶體相比的,臨時性充當分頁職能其實也是無奈之舉。很多時候的效能問題,都是由於Swap設定不足或者錯誤設定有關。

 

本篇主要介紹如何在系統中動態調整Swap空間大小。

 

1、環境介紹

 

當前我們採用Linux核心版本2.6Swap空間情況如下。

 

 

[root@SimpleLinux ~]# uname -r

2.6.18-128.el5

 

[root@SimpleLinux ~]# free

             total       used       free     shared    buffers     cached

Mem:        918380     292904     625476          0      47108     192936

-/+ buffers/cache:      52860     865520

Swap:      1534196          0    1534196

 

 

檢視系統中Swap可以使用free命令或者檢視/proc/swaps檔案。

 

 

[root@SimpleLinux ~]# cat /proc/swaps

Filename                                Type            Size    Used    Priority

/dev/sda2                               partition       1534196 0       -1

 

 

此時的Swap是透過分割槽/dev/sda2來進行支援。目前很多時候,我們儲存都是使用LVMLogical Volume Manager)來進行管理,當前系統中lv情況如下。

 

 

[root@SimpleLinux ~]# lvs

  LV   VG       Attr   LSize   Origin Snap%  Move Log Copy%  Convert

  lv1  VolGrp01 -wi-ao 192.00M                                     

  lv2  VolGrp01 -wi-a- 600.00M 

 

 

Red Hat官方提供的Swap設定方式看,有三種可選擇的策略,分別為LVM空間調整、LVM空間設定和Swap檔案。下面筆者從兩大類LVMSwapfile來介紹。

 

2LVM Swap設定

 

預設的Linux分割槽策略中,LVM已經成為標準分割槽方案。使用LVM的優點是可以進行靈活的空間配置使用和動態調節。對於Swap空間而言,使用LVM也是同樣有好處的。

 

Swap空間認可的一個專門的磁碟分割槽,使用LVMLogical Volume物件,恰恰可以幫助實現這個功能。

 

我們首先建立出專門用於SwapLogical Volume

 

 

[root@SimpleLinux ~]# lvcreate VolGrp02 -n lvswap01 -L 1000M

  Logical volume "lvswap01" created

[root@SimpleLinux ~]# lvs

  LV       VG       Attr   LSize    Origin Snap%  Move Log Copy%  Convert

  lv1      VolGrp01 -wi-ao  192.00M                                     

  lv2      VolGrp01 -wi-a-  600.00M                                     

  lvswap01 VolGrp02 -wi-a- 1000.00M

 

 

同格式化一樣,我們需要對新生成的lv進行swap“格式化”處理。

 

 

[root@SimpleLinux ~]# mkswap /dev/VolGrp02/lvswap01

Setting up swapspace version 1, size = 1048571 kB

 

 

/etc/fstab中新增上對swap空間的設定。

 

 

[root@SimpleLinux ~]# cat /etc/fstab

LABEL=/                 /                       ext3    defaults        1 1

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

UUID="5e007a89-326d-4a71-9744-8cd7d36a90a7"       /voltest01              ext3    defaults        1 1

/dev/VolGrp02/lvswap01  swap                    swap    defaults        0 0

LABEL=SWAP-sda2         swap                    swap    defaults        0 0

 

 

載入上swapon空間。

 

 

[root@SimpleLinux ~]# swapon -va

swapon on /dev/VolGrp02/lvswap01

[root@SimpleLinux ~]# cat /proc/swaps

Filename                                Type            Size    Used    Priority

/dev/sda2                               partition       1534196 0       -1

/dev/mapper/VolGrp02-lvswap01           partition       1023992 0       -2

[root@SimpleLinux ~]# free

             total       used       free     shared    buffers     cached

Mem:        918380     294152     624228          0      47424     193544

-/+ buffers/cache:      53184     865196

Swap:      2558188          0    2558188

 

 

注意,系統的swap空間已經新增上,容量已經增加。重啟之後,我們依然可以看到對應空間的存在。

 

 

[root@SimpleLinux ~]# free

             total       used       free     shared    buffers     cached

Mem:        918380     204772     713608          0      14620     152980

-/+ buffers/cache:      37172     881208

Swap:      2558188          0    2558188

 

 

3LVM Swap情況下,空間調整

 

進行Swap調整時非常常見的動作,我們平時可能根據系統執行情況進行動態調整。基於LVM的調整要注意一個問題,就是需要先swapoff空間,之後調整,最後再載入上。

 

我們先試驗下如何進行swap縮小。先進行swap關閉。

 

 

[root@SimpleLinux ~]# swapoff -v /dev/VolGrp02/lvswap01

swapoff on /dev/VolGrp02/lvswap01

[root@SimpleLinux ~]# free

             total       used       free     shared    buffers     cached

Mem:        918380     204856     713524          0      14724     153064

-/+ buffers/cache:      37068     881312

Swap:      1534196          0    1534196 (已經縮小)

[root@SimpleLinux ~]# lvs

  LV       VG       Attr   LSize    Origin Snap%  Move Log Copy%  Convert

  lv1      VolGrp01 -wi-ao  192.00M                                     

  lv2      VolGrp01 -wi-a-  600.00M                                     

  lvswap01 VolGrp02 -wi-a- 1000.00M         

 

 

縮小lv物件。

 

 

[root@SimpleLinux ~]# lvreduce /dev/VolGrp02/lvswap01 -L -400M

  WARNING: Reducing active logical volume to 600.00 MB

  THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce lvswap01? [y/n]: y

  Reducing logical volume lvswap01 to 600.00 MB

  Logical volume lvswap01 successfully resized

[root@SimpleLinux ~]# lvs

  LV       VG       Attr   LSize   Origin Snap%  Move Log Copy%  Convert

  lv1      VolGrp01 -wi-ao 192.00M                                     

  lv2      VolGrp01 -wi-a- 600.00M                                     

  lvswap01 VolGrp02 -wi-a- 600.00M          

 

 

之後再使用swapon進行啟動。

 

 

[root@SimpleLinux ~]# mkswap /dev/VolGrp02/lvswap01 (重新格式化,通知下File System

Setting up swapspace version 1, size = 629141 kB

[root@SimpleLinux ~]# swapon -va

swapon on /dev/VolGrp02/lvswap01

swapon on /dev/sda2

swapon: /dev/sda2: Device or resource busy

[root@SimpleLinux ~]# free

             total       used       free     shared    buffers     cached

Mem:        918380     205340     713040          0      14852     153244

-/+ buffers/cache:      37244     881136

Swap:      2148588          0    2148588

[root@SimpleLinux ~]# cat /proc/swaps

Filename                                Type            Size    Used    Priority

/dev/mapper/VolGrp02-lvswap01           partition       614392  0       -3

/dev/sda2                               partition       1534196 0       -2

[root@SimpleLinux ~]#

 

 

下面實驗擴充lv動作。

 

 

[root@SimpleLinux ~]# swapoff -v /dev/VolGrp02/lvswap01

swapoff on /dev/VolGrp02/lvswap01

[root@SimpleLinux ~]# lvresize /dev/VolGrp02/lvswap01 -L 900M

  Extending logical volume lvswap01 to 900.00 MB

  Logical volume lvswap01 successfully resized

[root@SimpleLinux ~]# mkswap /dev/VolGrp02/lvswap01

Setting up swapspace version 1, size = 943714 kB

[root@SimpleLinux ~]# swapon -va

swapon on /dev/VolGrp02/lvswap01

swapon on /dev/sda2

swapon: /dev/sda2: Device or resource busy

[root@SimpleLinux ~]# free

             total       used       free     shared    buffers     cached

Mem:        918380     205336     713044          0      14928     153248

-/+ buffers/cache:      37160     881220

Swap:      2455788          0    2455788

[root@SimpleLinux ~]# cat /proc/swaps

Filename                                Type            Size    Used    Priority

/dev/mapper/VolGrp02-lvswap01           partition       921592  0       -4

/dev/sda2                               partition       1534196 0       -2

 

 

刪除swap lv比較簡單,就是進行解除安裝之後從/etc/fstab中刪除行資訊即可。

 

 

[root@SimpleLinux ~]# swapoff -v /dev/VolGrp02/lvswap01

swapoff on /dev/VolGrp02/lvswap01

 

[root@SimpleLinux ~]# cat /etc/fstab

LABEL=/                 /                       ext3    defaults        1 1

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

/dev/VolGrp01/lv1       /voltest01              ext3    defaults        0 0

LABEL=SWAP-sda2         swap                    swap    defaults        0 0

 

 

4、使用檔案擴充swap空間

 

windows下,虛擬記憶體表現為系統目錄中的一個檔案。Swap也可以這樣實現。首先,swap空間如下:

 

 

[root@SimpleLinux ~]# free

             total       used       free     shared    buffers     cached

Mem:        918380     204436     713944          0      14680     153000

-/+ buffers/cache:      36756     881624

Swap:      1534196          0    1534196

 

 

使用dd建立一個空檔案,在檔案系統上。

 

 

[root@SimpleLinux ~]# dd if=/dev/zero f=/swapfile bs=1024 count=65536

65536+0 records in

65536+0 records out

67108864 bytes (67 MB) copied, 0.305277 seconds, 220 MB/s

[root@SimpleLinux ~]# mkswap /swapfile

Setting up swapspace version 1, size = 67104 kB

[root@SimpleLinux ~]# cd /

[root@SimpleLinux /]# ls -l | grep swapfile

-rw-r--r--  1 root   root     67108864 Oct 10 17:02 swapfile

 

 

再透過swapon命令進行載入動作。

 

 

[root@SimpleLinux /]# swapon /swapfile

[root@SimpleLinux /]# free

             total       used       free     shared    buffers     cached

Mem:        918380     271580     646800          0      14884     218564

-/+ buffers/cache:      38132     880248

Swap:      1599724          0    1599724

[root@SimpleLinux /]# cat /proc/swaps

Filename                                Type            Size    Used    Priority

/dev/sda2                               partition       1534196 0       -1

/swapfile                               file            65528   0       -2

 

 

刪除swap檔案,就可以實現解除安裝動作。不過要注意首先需要進行swapoff

 

 

[root@SimpleLinux /]# swapoff /swapfile

[root@SimpleLinux /]# free

             total       used       free     shared    buffers     cached

Mem:        918380     271580     646800          0      14920     218564

-/+ buffers/cache:      38096     880284

Swap:      1534196          0    1534196

[root@SimpleLinux /]# rm -r swapfile

rm: remove regular file `swapfile'? y

[root@SimpleLinux /]# cat /proc/swaps

Filename                                Type            Size    Used    Priority

/dev/sda2                               partition       1534196 0       -1

 

 

5、結論

 

Swap是我們進行效能調優過程中,經常使用的手段方法。掌握Swap的設定手段,對日常工作很有幫助。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-774174/,如需轉載,請註明出處,否則將追究法律責任。

相關文章