Linux系统的Swap分区,即交换分区,通常也称为虚拟内存,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。
Linux 系统的Swap 分区,即交换分区,通常也称为虚拟内存,Swap 空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到 Swap 空间中,等到那些程序要运行时,再从 Swap 中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行 Swap 交换。其实,Swap 的调整对 Linux 服务器,特别是 Web 服务器的性能至关重要。通过调整 Swap,有时可以越过系统性能瓶颈,节省系统升级费用。
设置交换分区(swap)
以CentOS7 为例,其它 Linux 系统方法也差不多,先用 dd 命令创建一个 1024M 的分区,这样就会创建/var/swapfile 这么一个分区文件
dd if=/dev/zero of=/var/swapfile bs=1M count=1024
然后进行格式化,把这个分区变成 swap 分区
/sbin/mkswap /var/swapfile
启用虚拟内存使用 swap 分区,使其成为有效状态
/sbin/swapon /var/swapfile
设置开机启动需要修改/etc/fstab 文件,增加如下一行
/var/swapfile none swap default 0 0
或者直接执行命令
echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab
通过上面简单的几个命令,我们已经设置了一个 1024M 的交换分区(虚拟内存)。
优化 SWAP
如果是 HDD 硬盘的话要尽可能避免使用 swap,在 # cat /proc/sys/vm/swappiness,值默认值是 60,swappiness=0 的时候表示最大限度使用物理内存,然后才是 swap 空间,swappiness=100 的时候表示积极的使用 swap 分区,并且把内存上的数据及时的搬运到 swap 空间里面,也就是说,你的内存在使用到 100-60=40%的时候,就开始出现有交换分区的使用。大家知道,内存的速度会比磁盘快很多,这样子会加大系统 io,同时造的成大量页的换进换出,严重影响系统的性能,所以我们在操作系统层面,要尽可能使用内存,对该参数进行调整,从而提高系统的性能。另:在大内存服务器中我们需要设置这个值为 0,尤其是在 Mysql 服务器上。
临时调整的方法如下,我们调成 10:
sysctl vm.swappiness=10
这只是临时调整的方法,重启后会回到默认设置的
永久修改方法:
在/etc/sysctl.conf 文件里添加如下参数:
vm.swappiness=10
或者直接在 SSH 输入命令:
echo 'vm.swappiness=10'>> /etc/sysctl.conf
加载系统参数(正常情况下会输出我们之前加入的内容)
sysctl -p
重启更新 SWAP
reboot
其它命令
查看当前内存使用情况
free -mt
查看当前交换分区路径
swapon -s
关闭虚拟内存,改成自己交换分区路径
swapoff /var/swapfile
开启虚拟内存,改成自己交换分区路径
swapon /var/swapfile
总结
如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果 Swap 空间用光了,那么系统就会发生错误。例如,Swap 空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此 Swap 空间的分配是很重要的,通常 Swap 空间的大小应是物理内存的 2-2.5 倍。
在正式的生产环境中,建议设置交换分区(swap)来提高系统和业务稳定性,当然交换分区不是万能的,若长期内存不足,建议还是增加物理内存为好。
网友评论