swap可以有效缓解系统内存小的问题

一、Swap分区介绍:

  Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。
  Swap分区,即交换区,系统在物理内存(这里应该是运行内存)不够时,与Swap进行交换。 其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。

二、突破128M Swap限制

经常看到有些Linux(国内汉化版)安装手册上有这样的说明:Swap空间不能超过128M。为什么会有这种说法?在说明“128M”这个数字的来历之前,先给问题一个回答:根本不存在128M的限制!限制是2G!
Swap空间是分页的,每一页的大小和内存页的大小一样,方便Swap空间和内存之间的数据交换。旧版本的Linux实现Swap空间时,用Swap空间的第一页作为所有Swap空间页的一个“位映射”(Bit map)。这就是说第一页的每一位,都对应着一页Swap空间。如果这一位是1,表示此页Swap可用;如果是0,表示此页是坏块,不能使用。这么说来,第一个Swap映射位应该是0,因为,第一页Swap是映射页。另外,最后10个映射位也被占用,用来表示Swap的版本(原来的版本是Swap_space ,最新的版本是swapspace2)。那么,如果说一页的大小为s,这种Swap的实现方法共能管理“8 * ( s - 10 ) - 1”个Swap页。对于i386系统来说s=4096,则空间大小共为133890048,如果认为1 MB=2^20 Byte的话,大小正好为128M。
之所以这样来实现Swap空间的管理,是要防止Swap空间中有坏块。如果系统检查到Swap中有坏块,则在相应的位映射上标记上0,表示此页不可用。这样在使用Swap时,不至于用到坏块,而使系统产生错误。

系统设计者认为:
1.硬盘质量很好,坏块很少。
2.就算有,也不多,只需要将坏块罗列出来,而不需要为每一页建立映射。
3.如果有很多坏块,就不应该将此硬盘作为Swap空间使用。
于是,Linux取消了位映射的方法,也就取消了128M的限制。直接用地址访问,限制为2G。

三、swap缺点:

swap无法替代物理内存,性能上也会差很多,在SSD硬盘上使用对读写性能会有所加成。

四、如何添加swap分区:

通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,具体配置参见各服务器产品的说明。

五、设置Swap注意事项:

分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。
如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。
另外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。

六、开始创建swap文件/分区:

创建swap有两种方法:
使用分区做为SWAP
使用文件做为SWAP

使用分区做为SWAP比较好,速度比文件的快,也不容易产生磁盘碎片所有应该尽量使用分区作为SWAP.

查看内存的情况:

此时swap应该为0(因为系统还没有swap)
查看的命令为free -m如下:

root@aml:~# free -m
              total        used        free      shared  buff/cache   available
Mem:            996          77         468          31         451         853
Swap:             0           0           0
---------命令解释---------
#free 命令主要是用来查看内存和 swap 分区的使用情况的,其中:
#total:是指总数;
#used:是指已经使用的;
#free:是指空闲的;
#shared:是指共享的;
#buffers:是指缓冲内存数;
#cached:是指缓存内存数,单位是KB;

1、创建SWAP文件,并使之生效:

先使用fdisk -l查看你要挂载SWAP的分区设备名称:

/dev/mmcblk0p2      1619968 15269887 13649920  6.5G 83 Linux

我这里选用的是系统的emmc做的演示,自己使用的话建议装在硬盘或者U盘上!

①、创建用于交换分区的文件:
#使用dd命令创建(SWAP文件必须是连续的)
root@aml:~# dd if=/dev/mmcblk0p2 of=swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 81.2157 s, 13.2 MB/s
root@aml:~#
#---------命令的解释---------
#bs为block_size大小可以自定义比如:bs=1M count=1024;代表设置大小为1G的SWAP分区

这样就制作了一个文件名为swapfile 1G的swap(文件名自定)

②、设置交换分区文件并立即启动:
#输入下面命令设置交换区文件:
mkswap /swapfile #文件名可自取
#------ 更多内容分享请关注公众号 > 大毛爱分享 ------#
root@aml:/# mkswap /swapfile
mkswap: /swapfile: insecure permissions 0644, 0600 suggested.#建议把swap设置成644或600权限
mkswap: /swapfile: warning: wiping old ext4 signature.
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=3a5866f2-26fa-487b-bacf-f8b07be621d5
#立即启动swap命令为:
root@aml:/# swapon /swapfile
swapon: /swapfile: insecure permissions 0644, 0600 suggested.
#检查swap是否生效 使用swapon -s
root@aml:/# swapon -s
Filename                                Type            Size    Used    Priority
/swapfile                               file            1048572 0       -2
root@aml:/#
③设置开启自启swap:

编辑fstab,在最后加入一行,格式如下:

/swapfile swap swap defaults 0 0
#注:如果在 /etc/rc.local 中有 swapoff -a 需要修改为 swapon -a
#使用`swapon -s `查看是否成功启用了:
swapon -s
Filename Type Size Used Priority
/root/swapfile file 65528 0 -1

如上所示表示swapfile已投入使用啦

④、 修改 swpapiness 参数
> 在 Linux 系统中,可以通过查看 /proc/sys/vm/swappiness 内容的值来确定系统对 SWAP 分区的使用原则。当 swappiness 内容的值为 0 时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用 SWAP 分区。当 swappiness 内容的值为 100 时,表示积极地使用 SWAP 分区,并且把内存中的数据及时地置换到 SWAP 分区。
查看修改前为 0,需要在物理内存使用完毕后才会使用 SWAP 分区。
可以使用下述方法临时修改此参数,假设我们配置为空闲内存少于 10% 时才使用 SWAP 分区:echo 10 >/proc/sys/vm/swappiness
若需要永久修改此配置,在系统重启之后也生效的话,可以修改 /etc/sysctl.conf 文件,并增加以下内容:vm.swappiness=10

2、使用分区作为swap :

硬盘/U盘分区建议使用windwos电脑先分区好,一般ext4格式win电脑不支持推荐使用DiskGenius.exe这个软件来分区就可以了(用免费功能就可以)另外值得提醒的是:有一些U盘是不支持ext4格式的,所以你在购买前最好询问下买家以防购买后无法使用!

注意:对分区不熟悉,不要轻易操作,重要数据要备份,硬盘有价,数据无价。

使用mkswap命令制作swap:

mkswap /dev/hda11  #/dev/hda11 为你要挂载swap的分区可使用fstab -l 查看确定
#OK,启用他:
swapon /dev/hda11
#查看是否成功启用
swapon -s

②、添加SWAP开机自启:
编辑fstab,在最后加入一行,格式类似如下:

/dev/hda11 swap swap defaults 0 0
#注:如果在 /etc/rc.local 中有 swapoff -a 需要修改为 swapon -a

七、关闭 SWAP

当系统出现内存不足时,开启 SWAP 可能会因频繁换页操作,导致 IO 性能下降。如果要关闭 SWAP,可以采用如下方法。
free -m 查询 SWAP 分区设置:
使用命令swapoff 关闭 SWAP,比如:swapoff /mnt/swap
修改 /etc/fstab 文件,删除或注释相关配置,取消 SWAP 的自动挂载:通过 free -m 确认 SWAP 已经关闭。
swappiness 参数调整:可以使用下述方法临时修改此参数,这里配置为 0%:echo 0 >/proc/sys/vm/swappiness
若需要永久修改此配置,在系统重启之后也生效的话,可以修改 /etc/sysctl.conf文件,并增加以下内容:vm.swappiness=0

更多精彩分享关注公众号 > 大毛爱分享
好了,到此结束…….

上一篇:debian系统安装软件时提示“no space left on device”(磁盘空间不足)问题解决
下一篇:Linux中的screen命令使用

留言评论

暂无留言