- A+
什么是swap
swap分区或交换内存文件,是在系统物理内存不够用的时候,由系统内存管理程序将那些很长时间没有操作内存数据,临时保存到swap分区虚拟内存文件中,以提高可用内存额度的一种机制。当那些程序要再次重新运行时,会再从Swap分区或虚拟内存文件中恢复之前保存的数据到内存中。swap可以理解为服务器的虚拟内存。
阿里云ECS设置
认为没必要设置虚拟内存,原文地址https://help.aliyun.com/knowledge_detail/40645.html
。
相关操作会导致额外的IO开销,特别是,如果内存使用率已经非常高,而同时IO性能也不是很好的情况下,该机制其实会起到相反的效果:不仅系统性能提升较小(因为内存使用率已经非常高了),而且由于频繁的内存到SWAP的切换操作,会导致产生大量额外的IO操作,导致IO性能进一步降低,最终反而降低了系统总体性能。
同时,为了保证服务器数据安全性和可靠性,阿里云ECS云磁盘使用了分布式文件系统作为云服务器的存储,对每一份数据都进行了强一致的多份拷贝。但是,该机制在保证用户数据安全的同时,由于3倍增涨的IO操作,会导致本地磁盘的存储性能和IO性能要弱一些。
综上,为了避免当系统资源不足时进一步降低ECS云磁盘的IO性能,所以ECS Windows默认没有启用虚拟内存,Linux默认未配置SWAP分区。
目前运行事实说明有必要启用swap内存
Swap内存大小设置为2g。关于Swap应该设置多少的问题,并没有直接依据。综合各种观点,设置为2g。不再赘言。以下以WDCP环境为例说明,如果是其他环境,命令的目录与WDCP不同。
swappiness值
swappiness
是一个0到100之间的整数。粗略表示主机使用内存和Swap的优先度。但并不严格,一般默认为60。参考链接https://www.douban.com/note/349467816/
。
swappiness=0
的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100
的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
步骤
1 SSH登录主机,查看Swap
cat /proc/swaps
2 新建2g Swap
cd /var/
dd if=/dev/zero of=swapfile bs=1024 count=2097152
3 生成Swap文件(创建交换空间)
/sbin/mkswap swapfile
4 启用新增加的Swap空间
/sbin/swapon swapfile
5 查看Swap,确认已经生效
free -m
6 把生成的Swap分区加入到fstab文件中,让系统引导时启动
echo "/var/swapfile swap swap defaults 0 0" >>/etc/fstab
7 查看swappiness参数
cat /proc/sys/vm/swappiness
8 修改swappiness参数为60(临时修改)
echo 60 > /proc/sys/vm/swappiness
9 永久生效
(用FTP)修改/etc/sysctl.conf
文件, 在文件里添加如下参数:
vm.swappiness=10
10 删除Swap分区
先停止swap分区
/sbin/swapoff /home/swap
删除swap分区文件
rm -rf /home/swap
修改/etc/fstab
文件,把/home/swap swap swap default 0 0
这行删除。