在阿里云,腾讯云成本不断下降的时代,许多个人都拥有一台相对来说低配的主机,内存可能是256M,512M,1G,或大一些到2G。在跑一些高内存使用的应用时,可能会应用崩掉,OOMKiller出来kill掉关键进程的情况,一定程度上配置交换区可以环境这种问题,交换区位于磁盘上,Linux负责在内存使用过高的时候,把低频数据写入交换区,从而让正在执行的应用获得需要的资源,这是一种空间换时间的策略,用慢的磁盘设备空间换取了降低资源不足导致应用崩掉的概率。在小内存硬件下运行数据库服务,大数据应用,配置交换区是一种比较合理的选择。
交换区的大小设置有各种说法,一般的说法都是
交换区大小 = (0.75 ~ 2) * 物理内存大小
0.75 ~ 2
具体的选择可以按实际情况决定,其实这也不是一个绝对的值,比如对于128M内存的设备,交换区设置为1G也无不可,具体还是看场景而定。此外,抛开作为服务器使用的设备,对于桌面用户来说,交换区是实现休眠所必须的。
交换区的设置可以通过划分专用磁盘分区或者以专用文件的形式进行,如果可以控制系统的安装过程,那么可以通过事先规范交换分区的形式设置交换,而云环境中获取的主机,似乎通过交换文件显得更加简单。至于这两种形式是否有性能区别?也许吧,但是应该微乎其微,查看资料,发现ArchLinux的WiKi中也提及这两者没有性能差异。
通过配置交换文件开启交换区的方法:
-
分配交换文件的磁盘存储空间,创建交换文件
fallocate -l size swap-file-path
size
为交换文件的大小,比如2G
, 4G
swap-file-path为交换文件的位置,交换文件位置没有特别的要求,按需指定即可,比如/var/swapfile
-
最小化权限
chmod 600 swap-file-path
-
格式化交换文件,创建交换区
mkswap swap-file-path
-
立即激活使用交换文件
swapon swap-file-path
现在可通过
free -m
或
swapon -s
查看交换空间
-
设置开机自动使用交换文件
在文件/etc/fstab
中加入swap-file-path none swap sw 0 0
当然,交换区并不是内存的替代品,如果应用需要,还是应该优先升级内存容量。