一.SWAP 說明
1、SWAP 概述
當系統的實體記憶體不夠用的時候,就需要將實體記憶體中的一部分空間釋放出來,以供當前執行的程式使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程式,這些被釋放的空間被臨時儲存到Swap空間中,等到那些程式要執行時,再從Swap中恢復儲存的資料到記憶體中。這樣,系統總是在實體記憶體不夠時,才進行Swap交換。
以上是SWAP 交換分割槽的作用。 實際上,我們更關注的應該是SWAP分割槽的大小問題。 設定多大才是最優的。一般來說可以按照如下規則設定swap大小:
4G以內的實體記憶體,SWAP 設定為記憶體的2倍。
4-8G的實體記憶體,SWAP 等於記憶體大小。
8-64G 的實體記憶體,SWAP 設定為8G。
64-256G實體記憶體,SWAP 設定為16G。
實際上,系統中交換分割槽的大小並不取決於實體記憶體的量,而是取決於系統中記憶體的負荷,所以在安裝系統時要根據具體的業務來設定SWAP的值。
2、系統在什麼情況下才會使用SWAP?
實際上,並不是等所有的實體記憶體都消耗完畢之後,才去使用swap的空間,什麼時候使用是由swappiness 引數值控制。
[root@rhce ~]# cat /proc/sys/vm/swappiness 60
該值預設值是60。swappiness=0的時候表示最大限度使用實體記憶體,然後才是 swap空間,swappiness=100的時候表示積極的使用swap分割槽,並且把記憶體上的資料及時的搬運到swap空間裡面。現在伺服器的記憶體動不動就是上百G,所以我們可以把這個引數值設定的低一些,讓作業系統儘可能的使用實體記憶體,降低系統對swap的使用,從而提高系統的效能。
二.使用磁碟為Linux新增swap
檢視磁碟及分割槽資訊
[root@ip-192-168-31-161 ~]# fdisk -l Disk /dev/xvda: 193.3 GB, 193273528320 bytes, 377487360 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000da64d Device Boot Start End Blocks Id System /dev/xvda1 * 2048 377487359 188742656 83 Linux Disk /dev/mapper/docker-202:1-385876097-pool: 107.4 GB, 107374182400 bytes, 209715200 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 65536 bytes / 65536 bytes Disk /dev/xvdf: 4294 MB, 4294967296 bytes, 8388608 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
新增新的分割槽
[root@ip-192-168-31-161 ~]# fdisk /dev/xvdf Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0x8fb93abe. Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-8388607, default 2048): (直接回車) Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-8388607, default 8388607): (直接回車) Using default value 8388607 Partition 1 of type Linux and of size 4 GiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
檢視磁碟及分割槽資訊
[root@ip-192-168-31-161 ~]# fdisk -l Disk /dev/xvda: 193.3 GB, 193273528320 bytes, 377487360 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000da64d Device Boot Start End Blocks Id System /dev/xvda1 * 2048 377487359 188742656 83 Linux Disk /dev/mapper/docker-202:1-385876097-pool: 107.4 GB, 107374182400 bytes, 209715200 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 65536 bytes / 65536 bytes Disk /dev/xvdf: 4294 MB, 4294967296 bytes, 8388608 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x8fb93abe Device Boot Start End Blocks Id System /dev/xvdf1 2048 8388607 4193280 83 Linux
可以看到/dev/xvdf1是新建立的分割槽,注意這裡fdisk ID的編號。 這裡顯示的83,它代表這個分割槽是ext的分割槽,這個是不能用來做swap的。我們繼續更改
[root@ip-192-168-31-161 ~]# fdisk /dev/xvdf Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): l (list known partition types) 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b 11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor 12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor 14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary 16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS 17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto 1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep 1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT 1e Hidden W95 FAT1 80 Old Minix Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 82 Changed type of partition 'Linux' to 'Linux swap / Solaris' Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
檢視磁碟及分割槽資訊
[root@ip-192-168-31-161 ~]# fdisk -l Disk /dev/xvda: 193.3 GB, 193273528320 bytes, 377487360 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000da64d Device Boot Start End Blocks Id System /dev/xvda1 * 2048 377487359 188742656 83 Linux Disk /dev/mapper/docker-202:1-385876097-pool: 107.4 GB, 107374182400 bytes, 209715200 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 65536 bytes / 65536 bytes Disk /dev/xvdf: 4294 MB, 4294967296 bytes, 8388608 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x8fb93abe Device Boot Start End Blocks Id System /dev/xvdf1 2048 8388607 4193280 82 Linux swap / Solaris
格式化swap分割槽:
[root@rhce /]# mkswap /dev/xvdf1 Setting up swapspace version 1, size = 1060252 KiB no label, UUID=39c73cf6-1848-4a78-83ec-35089f0eebcb
[root@ip-192-168-31-161 ~]# blkid
/dev/xvda1: LABEL="centos7_root" UUID="179c37d9-9ba3-47f2-ab50-cf76dec5ef8e" TYPE="xfs"
/dev/loop0: UUID="0c7e9760-c4df-4d5b-b0b6-b2f4487e757b" TYPE="ext4"
/dev/mapper/docker-202:1-385876097-pool: UUID="0c7e9760-c4df-4d5b-b0b6-b2f4487e757b" TYPE="ext4"
/dev/xvdf1: UUID="39c73cf6-1848-4a78-83ec-35089f0eebcb" TYPE="swap"
手工的啟動swap
[root@ip-192-168-31-161 ~]# swapon /dev/xvdf1
[root@ip-192-168-31-161 ~]# swapon -s
將/dev/xvdf1新增/etc/fstab檔案,系統啟動自動載入swap
[root@ip-192-168-31-161 ~]# vi /etc/fstab # # /etc/fstab # Created by anaconda on Tue Jul 8 16:48:19 2014 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # LABEL=centos7_root / xfs defaults 1 1 UUID=39c73cf6-1848-4a78-83ec-35089f0eebcb swap swap defaults 0 0