1. 程式人生 > >linux中對swap分區的管理

linux中對swap分區的管理

swap

一:swap分區概念原理


swap分區:(存放內存溢出來的數據)

從功能上講,交換分區主要是在內存不夠用的時候,將部分內存上的數據交換到swap空間上,以便讓系統不會因內存不夠用而導致oom或者更致命的情況出現。

一:swap基本概念

前提:知道內存回收概念

為什麽要進行內存回收?

1:內核需要為任何時刻突發到來的內存申請提供足夠的內存。所以一般情況下保證有足夠的free空間對於內核來說是必要的。所以內核有必要設計一個周期性回收內存的機制,以便cache的使用和其他相關內存的使用不至於讓系統的剩余內存長期處於很少的狀態。

2:當真的有大於空閑內存的申請到來的時候,會觸發強制內存回收。

所以,內核在應對這兩類回收的需求下,分別實現了兩種不同的機制:

  • 1:一個是使用 kswapd進程對內存進行周期檢查 ,以保證平常狀態下剩余內存盡可能夠用。一個是由內核進程kswapd直接調用內存回收的邏輯進行內存回收;

  • 2:另一個是 直接內存回收(directpagereclaim) ,就是當內存分配時沒有空閑內存可以滿足要求時,觸發直接內存回收。另一個是內存申請的時候進入slow path的內存申請邏輯進行回收。

整個掃描的過程分幾個循環:

  1. 首先掃描每個zone上的cgroup組;

  2. 然後再以cgroup的內存為單元進行page鏈表的掃描;

  3. 內核會先掃描anon的active鏈表,將不頻繁的放進inactive鏈表中,然後掃描inactive鏈表,將裏面活躍的移回active中;

    技術分享

  4. 進行swap的時候,先對inactive的頁進行換出;

  5. 如果是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分區的管理