分页和交换空间

时间:2019-04-29 03:17:33  来源:igfitidea点击:

什么是交换空间?

交换空间或调页空间是磁盘的一个区域,用于存储已换出(调出)RAM的内存。Linux的内存分为称为页的内存块。交换是Linux将内存内容移动到磁盘的预配置区域(称为交换空间)的过程。交换通常在需要的内存大于实际可用内存时发生。内核有责任将这些较少使用的页面换出到磁盘上,并释放内存以供需要内存的进程立即使用。

尽管交换可以在占用大量内存的时间内帮助您的系统,但是不应将其视为物理内存的替代品。物理内存的访问速度远快于交换分区上的存储。

如果您的系统不断报告大量交换,您将注意到系统性能下降。

查看系统上的可用交换空间

[root@centos01 ~]# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       1540088 0       -1

[root@centos01 ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       1540088 0       -1

可以看到我们的交换空间属于分区类型。我们有1504MB的可用空间(1540088Kb)。当前未使用任何交换空间。

我们还可以在此处设置优先级。如果您有多个交换空间,则优先级很有用。
您可以指定首先使用哪个设备,也可以将两个设备设置为相同的优先级。
当您将优先级设置为相同时,系统将在两个设备之间分配其分页,从而提高性能。

在Linux系统上最多可以定义32个交换空间!

free命令

free命令用于显示系统中的可用内存和已用内存量。

以kb为单位显示内存使用情况

[root@centos01 ~]# free -k
             total       used       free     shared    buffers     cached
Mem:        511100      90220     420880          0       6028      33988
-/+ buffers/cache:      50204     460896
Swap:      1540088          0    1540088

以mb显示内存使用情况:

[root@centos01 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           499         88        411          0          5         33
-/+ buffers/cache:         49        450
Swap:         1503          0       1503

创建一个新的交换空间

在此示例中, 添加一个1GB大小的新磁盘。

使用 fdisk -l查看新磁盘

Disk /dev/sdd: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 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: 0x00000000

将新磁盘定义为交换分区

[root@centos01 ~]# fdisk /dev/sdd

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130):
Using default value 130

Command (m for help): t
Selected partition 1

Hex code (type L to list codes): L

Hex code (type L to list codes): 82
Changed system type of partition 1 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/sdd: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 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: 0x79308d6b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1         130     1044193+  82  Linux swap / Solaris
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

使用mkswap命令创建交换空间

[root@centos01 ~]# mkswap /dev/sdd1
Setting up swapspace version 1, size = 1044188 KiB
no label, UUID=4bab3abf-3a24-433e-b74a-bc5646dec96b

使用swapon命令激活交换空间

[root@centos01 ~]# swapon /dev/sdd1

查看新的交换空间

[root@centos01 ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       1540088 0       -1
/dev/sdd1                               partition       1044184 0       -2

更改交换空间的优先级

[root@centos01 ~]# swapoff /dev/sdd1
[root@centos01 ~]# swapon -p 0 /dev/sdd1
[root@centos01 ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       1540088 0       -1
/dev/sdd1                               partition       1044184 0       0

在/etc/fstab中添加交换空间

添加新行(pri=0用于设置优先级)

/dev/sdd1                swap                   swap    pri=0,defaults          0 0

swappiness是什么?

Swappiness是一个参数,它控制内核将文件从物理内存转移到磁盘的频率。在大多数发行版中,这个值被设置为60(Ubuntu和CentOS的值是60),这个值是0到100之间的一个数字。swappiness的值0指示内核尽可能长时间地避免交换内存之外的进程。swappiness的值为100将指示内核积极地将物理内存中的进程交换到磁盘。

查看swappiness设置

[root@centos01 ~]# cat /proc/sys/vm/swappiness
60

修改swappiness值

[root@centos01 /]# echo 55 > /proc/sys/vm/swappiness

[root@centos01 /]# cat /proc/sys/vm/swappiness
55

添加swappiness到sysctl.conf

要使此更改永久生效,需要将以下行添加到/etc/sysctl配置文件中:

# Modified Swappiness Parameter
vm.swappiness=55

在Ubuntu下设置swappiness

在Ubuntu下,过程几乎相同。要确定您的当前值,我们可以执行相同的命令:cat /proc/sys/vm/swappiness

您应该看到熟悉的值60

如果要临时更改此设置,可以执行以下命令: sudo sysctl vm.swappiness=55

要使此更改永久生效,您需要在/etc/sysctl.conf中添加以下条目:

# Modified Swappiness Parameter
vm.swappiness=55