linux中對swap分區的管理
一:swap分區概念原理
swap分區:(存放內存溢出來的數據)
從功能上講,交換分區主要是在內存不夠用的時候,將部分內存上的數據交換到swap空間上,以便讓系統不會因內存不夠用而導致oom或者更致命的情況出現。
一:swap基本概念
前提:知道內存回收概念
為什麽要進行內存回收?
1:內核需要為任何時刻突發到來的內存申請提供足夠的內存。所以一般情況下保證有足夠的free空間對於內核來說是必要的。所以內核有必要設計一個周期性回收內存的機制,以便cache的使用和其他相關內存的使用不至於讓系統的剩余內存長期處於很少的狀態。
2:當真的有大於空閑內存的申請到來的時候,會觸發強制內存回收。
所以,內核在應對這兩類回收的需求下,分別實現了兩種不同的機制:
1:一個是使用 kswapd進程對內存進行周期檢查 ,以保證平常狀態下剩余內存盡可能夠用。一個是由內核進程kswapd直接調用內存回收的邏輯進行內存回收;
2:另一個是 直接內存回收(directpagereclaim) ,就是當內存分配時沒有空閑內存可以滿足要求時,觸發直接內存回收。另一個是內存申請的時候進入slow path的內存申請邏輯進行回收。
整個掃描的過程分幾個循環:
首先掃描每個zone上的cgroup組;
然後再以cgroup的內存為單元進行page鏈表的掃描;
內核會先掃描anon的active鏈表,將不頻繁的放進inactive鏈表中,然後掃描inactive鏈表,將裏面活躍的移回active中;
進行swap的時候,先對inactive的頁進行換出;
如果是file的文件映射page頁,則判斷其是否為臟數據,如果是臟數據就寫回,不是臟數據可以直接釋放。
這樣看來, 內存回收這個行為會對兩種內存的使用進行回收:
一種是anon的匿名頁內存,主要回收手段是swap;
另一種是file-backed的文件映射頁,主要的釋放手段是寫回和清空。
因為針對filebased的內存,沒必要進行交換,其數據原本就在硬盤上,回收這部分內存只要在有臟數據時寫回,並清空內存就可以了,以後有需要再從對應的文件讀回來。
以上總結:回收內存可以有兩種途徑(匿名頁交換(swap)和file緩存清空(直接釋放))
備註:vim /proc/sys/vm/swappiness
裏面的數字表示swap和緩存清空相比較被使用的優先級
二:swap分區的管理
swapon -s ##查看系統中的swap分區
1:當以硬盤分區作為swap交換空間時:
fdisk /dev/vdb ##新建一個swap分區
[[email protected] ~]# fdisk /dev/vdb 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): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): 1 Invalid partition type `1‘ Command (m for help): q [[email protected] ~]# fdisk /dev/vdb 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): Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): [[email protected] ~]# [[email protected] ~]# fdisk /dev/vdb 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): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): First sector (2048-20971519, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +2G Partition 1 of type Linux and of size 2 GiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): l 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 Hex code (type L to list all codes): 82 Changed type of partition ‘Linux‘ to ‘Linux swap / Solaris‘ Command (m for help): p Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 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: 0x000ccf0e Device Boot Start End Blocks Id System /dev/vdb1 2048 4196351 2097152 82 Linux swap / Solaris Command (m for help): wq The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks
[[email protected] ~]# partprobe ##同步分區表 [[email protected] ~]# mkswap /dev/vdb1 ##將分區格式化為swap [[email protected] ~]# swapon -a /dev/vdb1 ##添加swap分區 [[email protected] ~]# swapon -s ##查看swap分區 Filename Type Size Used Priority /dev/vdb1 partition 2097148 0 -1
永久添加swap
cat /etc/fstab /dev/vdb1 swap swap defaults,pri=1 0 0
pri表示優先級
2:當以文件作為swap分區時
dd if=/dev/zero of=/swapfile bs=1M count=1000 ##創建一個1G大小的文件
mkswap /swapfile ##格式化為swap類型
swapon -a /swapfile ##臨時添加到swap裏
3:刪除swap分區
vim /etc/fstab ##刪除此文件中添加的swap行
swapoff /swapfile ##斷開swap文件鏈接
swapoff /dev/vdb1 ##斷開swap磁盤鏈接
rm -rf /swapfile ##刪除文件
fdisk /dev/vdb ##刪除磁盤分區
partprobe ##同步分區表
本文出自 “12462896” 博客,請務必保留此出處http://12472896.blog.51cto.com/12462896/1953838
linux中對swap分區的管理