引言:由于本网站部署在旧金山的digitalocean的VPS上,所选用硬件配置(1 CPU /512MB MEM / 20GB SSD DISK)比较低,而且我使用了CentOS 7(CentOS 7仅提供64位版本)。系统安装是并没有配置SWAP交换分区,但也没有太在意。但在安装部署LAMP时在编译安装MySQL老是启动出错,给出的错误日志又很简单,很难排查,一度认为是我编译的问题。后来使用YUM直接安装,发现MariaDB很容易挂掉,检查错误日志才发现是内存不够导致的问题。于是添加swap分区变得很重要了。
什么是交换内存(swap)?
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。
注意:虚拟内存不只是“用磁盘空间来扩展物理内存”的意思——这只是扩充内存级别以使其包含硬盘驱动器而已。把内存扩展到磁盘只是使用虚拟内存技术的一个结果,它的作用也可以通过覆盖或者把处于不活动状态的程序以及它们的数据全部交换到磁盘上等方式来实现。对虚拟内存的定义是基于对地址空间的重定义的,即把地址空间定义为“连续的虚拟内存地址”,以借此“欺骗”程序,使它们以为自己正在使用一大块的“连续”地址。
swap分区合适大小?
swap分区并不是越大越好,一般有这么几点建议这样子确定其大小:(1)( 内存大小 + Swap分区大小 ) * 80%或70% = 程序需要占用总内存数;(2)swap空间应大于或等于物理内存的大小,最小不应小于64M,通常swap空间的大小可以是物理内存的2-2.5倍。比如你的内存已经达到4G,其大小可以等于或小于4G,但一些软件(如oracle数据库)可能对此要求的大小不一样。
如何创建swap和设置?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@iifocus ~]# free -m total used free shared buffers cached Mem: 490 448 42 27 16 215 -/+ buffers/cache: 216 273 Swap: 0 0 0 [root@iifocus ~]# mkdir /data [root@iiocus ~]# dd if=/dev/zero of=/data/swapfile bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 1.51878 s, 707 MB/s [root@iifocus ~]# mkswap /data/swapfile ##创建交换分区 [root@iifocus ~]# swapon /data/swapfile ##激活交换分区 [root@iifocus ~]# chmod 0600 /data/swapfile ##出于安全考虑,设置权限 [root@iifocus ~]# free -m total used free shared buffers cached Mem: 490 453 36 4 10 360 -/+ buffers/cache: 82 407 Swap: 1023 0 1023 [root@iifocus ~]# swapoff /data/swapfile #关闭添加的交换分区 以下上添加swap交换分区的操作可以实时生效,但系统重启之后继续生效则必须修改/etc/fstab,追加以下内容:/data/swapfile none swap sw 0 0 [root@iifocus ~]# echo '/data/swapfile none swap sw 0 0'>>/etc/fstab |
参考资料与拓展阅读:
【1】虚拟内存