分页和交换空间
什么是交换空间?
交换空间或调页空间是磁盘的一个区域,用于存储已换出(调出)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