Linux環境下Swap配置方法
在Unix/Linux環境下,Swap是比較重要的空間配置內容。Swap出現的背景源於對實體記憶體的使用特性。相對於外儲存器(硬碟)而言,記憶體速度具有很強的優勢。但是,出於經濟方面和技術方面的一些原因,實體記憶體在過去一個時期內,一直是比較“稀缺”的資源。
對作業系統而言,如果存在實體記憶體不足的情況,通常使用硬碟空間進行彌補,這也就是我們常看到的虛擬記憶體技術。Window環境中,我們稱為虛擬記憶體。在Unix/Linux環境中,也就是Swap空間。
我們非常熟悉一個經典的Swap設定規則:如果實體記憶體大小小於2G,設定的Swap分割槽大小為實體記憶體的兩倍。如果實體記憶體大小大於等於2G,可以考慮設定Swap分割槽等於實體記憶體或者1.5倍記憶體大小。
從效能上看,Swap是不能和實體記憶體相比的,臨時性充當分頁職能其實也是無奈之舉。很多時候的效能問題,都是由於Swap設定不足或者錯誤設定有關。
本篇主要介紹如何在系統中動態調整Swap空間大小。
1、環境介紹
當前我們採用Linux核心版本2.6,Swap空間情況如下。
[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來進行支援。目前很多時候,我們儲存都是使用LVM(Logical 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檔案。下面筆者從兩大類LVM和Swapfile來介紹。
2、LVM Swap設定
預設的Linux分割槽策略中,LVM已經成為標準分割槽方案。使用LVM的優點是可以進行靈活的空間配置使用和動態調節。對於Swap空間而言,使用LVM也是同樣有好處的。
Swap空間認可的一個專門的磁碟分割槽,使用LVM的Logical Volume物件,恰恰可以幫助實現這個功能。
我們首先建立出專門用於Swap的Logical 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
3、LVM 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux下配置java環境LinuxJava
- Linux 下配置 node + mongodb 環境LinuxMongoDB
- linux環境下ssh 互信配置Linux
- Linux環境下nginx安裝配置LinuxNginx
- oracle linux環境下hostonly模式配置OracleLinux模式
- 在linux環境下安裝JDK並配置環境變數LinuxJDK變數
- 基於Linux的 工作環境配置方法Linux
- Linux環境配置Linux
- DM8 Linux環境下配置ODBCLinux
- Linux下Java環境變數的配置LinuxJava變數
- windows環境下memcache配置方法 詳細篇Windows
- linux 多工程的環境變數配置方法Linux變數
- Linux系統下CUDA和cuDNN環境配置LinuxDNN
- Linux下jsp環境:apache,tomcat配置LinuxJSApacheTomcat
- Windows環境下phpMyAdmin的安裝配置方法WindowsPHP
- Maven環境下MyBatisGenerator 配置MavenMyBatis
- Windows 下 Laravel 環境配置WindowsLaravel
- Mac環境下AS配置GitMacGit
- NVM,Windows下環境配置Windows
- ubuntu下golang環境配置UbuntuGolang
- windows下JDK環境配置WindowsJDK
- 【推薦】配置Linux環境變數的常用方法!Linux變數
- jdk在linux下安裝、配置環境變數JDKLinux變數
- Linux環境下elasticsearch-6.2.2安裝以及配置LinuxElasticsearch
- Linux & Windows 環境下 RabbitMQ 安裝與基本配置LinuxWindowsMQ
- Linux & Windows 環境下 Redis 安裝與基本配置LinuxWindowsRedis
- Linux下的C/C++編譯環境配置LinuxC++編譯
- Redhat linux AS4 環境下iSCSI協議配置RedhatLinux協議
- Linux環境變數配置Linux變數
- linux上java環境配置LinuxJava
- Linux 下安裝配置 JDK7 配置環境(debian 7)LinuxJDK
- Linux下環境變數配置方法梳理(.bash_profile和.bashrc的區別)Linux變數
- ubuntu下hadoop環境配置UbuntuHadoop
- Linux環境下ATAPI MO的使用方法(轉)LinuxAPI
- Linux下環境搭建(二)——jenkins+gitlab配置LinuxJenkinsGitlab
- Linux環境下RPM方式JDK安裝及配置LinuxJDK
- Linux環境下MySQL5.6Master-Slave配置實戰LinuxMySqlAST
- linux下使用者使用sql*plus的環境配置LinuxSQL