文章目录
一、swap分区
SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用。它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见。
虽然SWAP分区能够作为"虚拟"的内存,但它的速度比物理内存慢太多,因此如果需要更快的速度,并不能寄希望于SWAP。最好的办法仍然是加大物理内存,SWAP分区只是临时的解决办法.
linux下的分区推荐一个交换分区,作为所划分的内存不够的时候使用
交换分区(swap)的合理值一般在内存的1.5~2 倍左右,可以适当加大。实际上具体还是以实际应用为准,swap为内存的1.5~2倍也不过是经验之谈。如果交换分区的使用都超过物理内存以上,那么只能说明服务器的性能太差了
当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。
计算机用户会经常遇这种现象。例如,在使用[Windows系统]时,可以同时运行多个程序,当你切换到一个很长时间没有理会的程序时,会听到硬盘“哗哗”直响。这是因为这个程序的内存被那些频繁运行的程序给“偷走”了,放到了Swap区中。因此,一旦此程序被放置到前端,它就会从Swap区取回自己的数据,将其放进内存,然后接着运行。
需要说明一点,并不是所有从物理内存中交换出来的数据都会被放到Swap中(如果这样的话,Swap就会[不堪重负],有相当一部分数据被直接交换到文件系统。
例如,有的程序会打开一些文件,对文件进行读写(其实每个程序都至少要打开一个文件,那就是运行程序本身),当需要将这些程序的内存空间交换出去时,就没有必要将文件部分的数据放到Swap空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下次需要时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。但是那些用malloc和new函数生成的对象的数据则不同,它们需要Swap空间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据。这类数据还包括堆栈中的一些状态和变量数据等。所以说,Swap空间是“匿名”数据的交换空间。
(一)查看Swap分区大小
用法: free [选项]
选项:
- -b:以字节B为单位显示
- -k:以k为单位输出(1k=1024B)
- -m:以M为单位显示
- -g:以G为单位显示
- -h:以便于识别的方式显示
[root@Dxk ~]# free -h
total used free shared buff/cache available
Mem: 972M 195M 666M 7.6M 109M 643M
Swap: 3.7G 0B 3.7G
[root@Dxk ~]# free -m
total used free shared buff/cache available
Mem: 972 195 666 7 109 643
Swap: 3815 0 3815
也可以使用swapon -s命令进行查看
[root@Dxk ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 3907580 0 -2
(二)交换分区的创建
Linux下可以创建两种类型的交换空间,一种是swap分区,一种是swap文件。前者适合有空闲的分区可以使用,后者适合于没有空的硬盘分区,硬盘的空间都已经分配完毕。
系统的Swap分区大小设置多大才是最优呢? 关于这个问题,应该说只能有一个统一的参考标准,具体还应该根据系统实际情况和内存的负荷综合考虑,ORACLE官方文档推荐如下设置,这是根据物理内存来做参考
RAM | Swap Space |
---|---|
Up to 512 MB | 2 times the size of RAM |
Between 1024 MB and 2048 MB | 1.5 times the size of RAM |
Between 2049 MB and 8192 MB | Equal to the size of RAM |
More than 8192 MB | 0.75 times the size of RAM |
1.以分区形式创建
第一种:基于普通分区的创建
添加磁盘,创建分区
[root@Dxk ~]# parted /dev/sdb mklabel gpt #对添加的磁盘进行GPT格式分区
警告: The existing disk label on /dev/sdb will be destroyed and all
data on this disk will be lost. Do you want to continue?
是/Yes/否/No? y
信息: You may need to update /etc/fstab.
[root@Dxk ~]# parted /dev/sdb mkpart 1 xfs 0% 20% #创建一个名为sdb1大小为sdb的五分之一的xfs分区
信息: You may need to update /etc/fstab.
#内核重新读取分区表
[root@Dxk ~]# partprobe /dev/sdb1
将此分区格式化为swap分区
[root@Dxk ~]# mkswap /dev/sdb1
mkswap: /dev/sdb1: warning: wiping old LVM2_member signature.
正在设置交换空间版本 1,大小 = 4193276 KiB
无标签,UUID=c478806f-5cf3-49a6-bfe7-ea0458fe8af5
查看格式化是否成功
[root@Dxk ~]# blkid /dev/sdb1
/dev/sdb1: UUID="c478806f-5cf3-49a6-bfe7-ea0458fe8af5" TYPE="swap" PARTLABEL="1" PARTUUID="beb50db8-b146-41d5-8972-c0c13556f2d2"
挂载
[root@Dxk ~]# echo "/dev/sdb1 swap swap defaults 0 0" >> /etc/fstab
[root@Dxk ~]# swapon -a #开启/etc/fstab文件中的swap分区
查看是否成功
[root@Dxk ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 3907580 0 -2
/dev/sdb1 partition 4193276 0 -3
[root@Dxk ~]# free -h
total used free shared buff/cache available
Mem: 972M 187M 665M 7.6M 119M 651M
Swap: 7.7G 0B 7.7G
这样一个交换分区就创建成功了
第二种:基于逻辑卷的方式创建
创建逻辑卷
[root@Dxk ~]# parted /dev/sdb mkpart 2 xfs 20% 40%
信息: You may need to update /etc/fstab.
[root@Dxk ~]# pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created.
[root@Dxk ~]# vgcreate myvg /dev/sdb2
Volume group "myvg" successfully created
[root@Dxk ~]# lvcreate -n mylv01 -L 2G /dev/myvg
Logical volume "mylv01" created.
将此逻辑卷格式化为swap分区
[root@Dxk ~]# mkswap /dev/myvg/mylv01
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=eeeaa09d-fa40-4fca-9c15-adf3584fc158
查看格式化是否成功
[root@Dxk ~]# blkid /dev/myvg/mylv01
/dev/myvg/mylv01: UUID="eeeaa09d-fa40-4fca-9c15-adf3584fc158" TYPE="swap"
挂载
[root@Dxk ~]# echo "/dev/myvg/mylv01 swap swap defaults 0 0" >> /etc/fstab
[root@Dxk ~]# swapon -a
查看挂载是否成功
[root@Dxk ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 4dd7e68d-866e-45c4-90fa-a874f9860a3a /boot
└─sda2 LVM2_member 0BZ0Fj-Chto-UjJM-1C8c-sllG-LZgX-RchmZs
├─centos-root xfs 065251f3-2332-48af-8d1e-bd8f0ecbd94f /
├─centos-swap swap b41af099-35bc-4719-8a86-83b7476c3735 [SWAP]
└─centos-home xfs 6de0d75d-afaf-4550-940f-41ec9ce3302c /home
sdb
├─sdb1 swap c478806f-5cf3-49a6-bfe7-ea0458fe8af5 [SWAP]
└─sdb2 LVM2_member fSsNcd-lgdn-mvWE-PI5L-TTme-cnJN-D81888
└─myvg-mylv01 swap eeeaa09d-fa40-4fca-9c15-adf3584fc158 [SWAP]
查看交换分区信息
[root@Dxk ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 3907580 0 -2
/dev/sdb1 partition 4193276 0 -3
/dev/dm-3 partition 2097148 0 -4
所以如果是基于逻辑卷创建的swap交换分区,那么便可以进行动态的扩容和所容 ,通过 lvextend 和 lvreduce 进行实现即可
2.以文件形式创建
创建文件
[root@Dxk ~]# dd if=/dev/zero of=./swap.img count=512 bs=2M
记录了512+0 的读入
记录了512+0 的写出
1073741824字节