Linux虚拟内存(swap)调优篇-swappiness参数

                     Linux虚拟内存(swap)调优篇

                                           作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

  swappiness的值的大小对如何使用swap分区是有着很大的联系的。先前,人们建议把vm.swapiness设置为0,它意味着“除非发生内存益处,否则不要进行内存交换”。直到Linux内核3.5-rcl版本发布,这个值的意义才发生了变化。这个变化被一直到其他的发行版本上,包括RedHat企业版内核2.6.32-303。在发生变化之后,0意味着“在任何情况下都不要发生交换”。所以现在建议把这个值设置为1。swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

一.创建交换分区

1>.什么是虚拟内存

  如果物理内存不够用时,可以将那些最近很少使用的页面数据(Page)置换出去,即切换到硬盘上,但是要注意的是内存文件的格式和硬盘中文件的格式是不一样的,所以这个分区必须格式化成跟内存兼容的模式不能转换成文件的格式。以便把内存的page直接存入这个分区,方便内存直接调用。而这个页面(page)数据对于32位的操作系统一个page大概是4K左右,对于64位操作系统这个page大小是可变的,4k-2M的大小都是比较常见的。事实上到底能使用多大的页面(page)取决于CPU而不取决于内存哟!这就是虚拟内存的概念。在linux上我们称之为交换分区。记住,虚拟内存必须是一个单独的分区。

2>.虚拟内存能代替物理内存运行程序吗?

扫描二维码关注公众号,回复: 4171359 查看本文章

  答案是否定的,只是使用虚拟内存暂时保存数据,而不是代替物理内存运行程序。 

3>.虚拟内存的作用

  当运行某个大程序、大游戏,需要的内存超过空闲内存但小于物理内存总量时,会暂时把内存里这些数据放到磁盘上的虚拟内存里,空出物理内存运行游戏。等退出游戏后,又会把虚拟内存里的东西读出来,放回物理内存。所以,虚拟内存,并不是用来虚拟物理内存的,而是暂存数据的。如果对内存的需求大于物理内存总量,那虚拟内存设多大都不管用。电脑内存太低,根本的方法还是增加物理内存,才能流畅。虚拟内存机制上就不管用,即使管用,比物理内存低100倍的速度,也管不上什么实际的作用。所以,虚拟内存大了是没用的,反而白占用磁盘空间。

4>.交换分区常用的参数介绍

交换分区:
      mkswap 格式化为虚拟内存
      -L label 指定卷标
      swapon 启动虚拟内存
      -a 启动所有的虚拟分区
      -p:指定优先级
      swapoff 关闭虚拟内存
      更多参数请参考man mkswap

5>.案例实操-创建交换分区的步骤

[root@yinzhengjie ~]# fdisk /dev/sdb  #对第二块硬盘进行分区调整

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p  #查看当前分区情况

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x8614a108

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  83  Linux
/dev/sdb2             133         264     1060290   83  Linux
/dev/sdb3             265         526     2104515   83  Linux
/dev/sdb4             527        1305     6257317+   5  Extended
/dev/sdb5             527         919     3156741   83  Linux
/dev/sdb6             920        1181     2104483+  83  Linux    #我想讲第6个分区弄成交换分区。

Command (m for help): t  #调整分区ID
Partition number (1-6): 6  #选择分区编号为6
Hex code (type L to list codes): L   #查看分区类型所对应的ID号,我们发现“82”就是交换分区的编号

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1
Hex code (type L to list codes): 82   #设置该分区的标号
Changed system type of partition 6 to 82 (Linux swap / Solaris)

Command (m for help): P   #查看当前分区情况

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x8614a108

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  83  Linux
/dev/sdb2             133         264     1060290   83  Linux
/dev/sdb3             265         526     2104515   83  Linux
/dev/sdb4             527        1305     6257317+   5  Extended
/dev/sdb5             527         919     3156741   83  Linux
/dev/sdb6             920        1181     2104483+  82  Linux swap / Solaris

Command (m for help): W  #保存并退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# fdisk -l /dev/sdb  #查看分区信息

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x8614a108

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  83  Linux
/dev/sdb2             133         264     1060290   83  Linux
/dev/sdb3             265         526     2104515   83  Linux
/dev/sdb4             527        1305     6257317+   5  Extended
/dev/sdb5             527         919     3156741   83  Linux
/dev/sdb6             920        1181     2104483+  82  Linux swap / Solaris
[root@yinzhengjie ~]# 
调整分区为交换分区(swap)格式
[root@yinzhengjie ~]# kpartx -af /dev/sdb
[root@yinzhengjie ~]# partx -a /dev/sdb   #重读分区表信息,其实也可以不用敲击这些命令的如果你是一块新硬盘的话。
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 3
BLKPG: Device or resource busy
error adding partition 4
BLKPG: Device or resource busy
error adding partition 5
BLKPG: Device or resource busy
error adding partition 6
[root@yinzhengjie ~]# 
用partx 重读一下分区表,避免系统未识别最新分区信息。
[root@yinzhengjie ~]# mkswap /dev/sdb6  #将分区格式化成swap格式
Setting up swapspace version 1, size = 2104476 KiB
no label, UUID=41687bb2-c775-489c-9b32-1e4be73c233b   #看见没有,这里是“no label”,是因为我没有定义卷标名。
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# mkswap -L myswap /dev/sdb6   #用-L参数定义一个卷标名。
Setting up swapspace version 1, size = 2104476 KiB
LABEL=myswap, UUID=0553b99a-ee75-4476-8eda-70c591206467  #看见没,“LABEL=myswap”这就是我定义的卷标名称。
[root@yinzhengjie ~]# 
用mkswap定义卷标名称
[root@yinzhengjie ~]# cat /proc/meminfo | grep "^S"   #查看当前交换分区大小
SwapCached:            0 kB
SwapTotal:       2031612 kB  #目前交换分区大小为2G
SwapFree:        2031612 kB  #表示空闲交换分区大小
Shmem:              1444 kB
Slab:              75020 kB
SReclaimable:      15620 kB
SUnreclaim:        59400 kB
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# swapon /dev/sdb6   #启用我们已经格式化好的交换分区“/dev/sdb”
[root@yinzhengjie ~]# cat /proc/meminfo | grep "^S"   #再次查看当前交换分区大小
SwapCached:            0 kB
SwapTotal:       4136088 kB   #我们发现交换分区大小变大了2G
SwapFree:        4136088 kB
Shmem:              1444 kB
Slab:              75148 kB
SReclaimable:      15656 kB
SUnreclaim:        59492 kB
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# swapoff /dev/sdb6  #关闭交换分区“/dev/sdb”
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# cat /proc/meminfo | grep "^S"  #验证是否关闭成功
SwapCached:            0 kB
SwapTotal:       2031612 kB   #发现的确是少了2G的空间
SwapFree:        2031612 kB
Shmem:              1444 kB
Slab:              75068 kB
SReclaimable:      15636 kB
SUnreclaim:        59432 kB
[root@yinzhengjie ~]#
swapon和swapoff的用法展示

6>.Linux清除swap方法 

  想要了解更多关于文件系统的知识,详情请参考:https://www.cnblogs.com/yinzhengjie/p/6840563.html 

二.swappiness参数在内存与交换分区之间优化作用

猜你喜欢

转载自www.cnblogs.com/yinzhengjie/p/9994207.html
今日推荐