给阿里云ECS添加SWAP交换分区

  • 2017-05-08
  • 0

最近发现租用的阿里云服务器频繁出现MYSQL自动关闭,HTTP服务自动关闭,经查为阿里云ECS默认关闭交换分区,解决如下:

Swap分区,即交换区,系统在物理内存不够时,与Swap进行交换。 其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。

分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。

如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。

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

另外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。

下面说一下linux添加swap交换分区的方法

1、进入一个目录:cd /var/
2、获取256M的文件块:dd if=/dev/zero of=swapfile bs=1024 count=262144
如果需要添加2G的SWAP分区,则获取2G的文件块:  dd if=/dev/zero of=swapfile bs=1024 count=2097152
3、创建swap文件:/sbin/mkswap swapfile
4、激活swap文件:/sbin/swapon swapfile
5、查看一下swap是否正确:/sbin/swapon -s
6、加到fstab文件中让系统引导时自动启动:vi /etc/fstab
在末尾增加以下内容:/var/swapfile swap swap defaults 0 0
也可以执行如下命令,感觉这样更方便 :echo “/var/swapfile swap swap defaults 0 0” >>/etc/fstab
顺便附上DD命令的参数介绍:

dd命令
功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令实现DOS下的diskcopy命令的作用。先用dd命令把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件写入第二张软盘上,完成diskcopy的功能。需要注意的是,应该将硬盘上的寄存文件用rm命令删除掉。系统默认使用标准输入文件和标准输出文件。

语法:dd [选项]
if =输入文件(或设备名称)。
of =输出文件(或设备名称)。
ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。
skip = blocks 跳过读入缓冲区开头的ibs*blocks块。
obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。
bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)
cbs = byte 一次转换bytes字节。
count=blocks 只拷贝输入的blocks块。

注意:阿里云默认在启动项里关闭了SWAP分区,在/etc/rc.d/rc.local文件里有一行 swapoff -a ,表示禁用swap。把这行删掉就好了。