很多人在使用VPS时会遇到有关swap的问题,虽然我之前对这方面了解不多,但通过查阅资料后,整理出一些基本概念,欢迎大家指正。
首先,swap(交换分区)类似于Windows的虚拟内存,当物理内存不足时,会用硬盘的一部分空间临时充当内存。这种做法虽然能缓解内存紧张,但硬盘的读写速度远低于内存,所以开启swap后,硬盘I/O负载会增加,性能会受到影响。在基于XEN和KVM的VPS中,通常可以手动调整swap的大小,SSD硬盘上的swap效果会更好。
其次是burst,全称是burst RAM,这是真实的内存,性能和普通内存相同。它一般是服务器预留出来的额外内存,当你的内存使用接近上限时,系统会允许短时间内使用这部分额外内存。也就是说,只有当母服务器还有剩余内存时,burst才可用。
再来看vswap,它是OpenVZ环境下的一种特殊机制。OpenVZ可以将部分内存模拟成和硬盘swap一样的交换区,即vSWAP。为了模拟硬盘的读写效果,这段内存的读写速度会被刻意降低,这意味着虽然速度比硬盘快,但相较普通内存程序仍会变慢。如果服务器内存紧张,无法为vswap分配足够内存,就只能使用硬盘的swap了。
简单来说,如果服务提供商超卖资源,导致内存紧缺,burst RAM和vswap的作用会大打折扣,因为没有足够的内存去支持它们。相比之下,硬盘上的swap虽然速度慢,但至少能为系统提供一定的缓冲空间。
关于在XEN和KVM环境下增加swap的步骤,操作如下:
1. 进入目录:cd /var/
2. 创建一个1GB的swap文件块:dd if=/dev/zero of=swapfile bs=1024 count=1038336
3. 格式化为swap文件:/sbin/mkswap swapfile
4. 激活swap文件:/sbin/swapon swapfile
5. 验证swap是否生效:/sbin/swapon –s
6. 将swap文件添加到fstab,使系统启动时自动挂载:echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab
需要注意的是,在OpenVZ环境下,增加swap容量可能只是数值上的变化,实际效果并不明显。而在XEN和KVM上,如果swap使用的是SSD空间,性能提升会更加显著。