Swap科普:小内存VPS加Swap,是救急还是饮鸩止渴
1G内存的VPS跑不动应用,加Swap能不能续命?小够讲清Swap的原理、什么时候有用、什么时候是掩耳盗铃,以及正确的加法。
我是小够。1G内存的VPS想跑个稍大点的应用,内存爆了怎么办?很多人第一反应:加Swap。硬盘当内存用,听起来像白嫖。但Swap是救急还是饮鸩止渴,得看你怎么用。
Swap是什么
一句话:硬盘上划一块区域,内存不够时拿来当内存使。Linux内存爆了不直接杀进程,先把不常用的内存页挪到Swap里腾地方。速度比内存慢几十到上百倍,但至少不死机。
什么时候有用
- 突发峰值:平时内存够用,偶尔编译、备份时burst一下,Swap能扛过那几分钟,避免进程被杀。这种场景加Swap很值。
- 低频访问的数据:有些常驻进程占着内存但很少用,被换到Swap里,热数据留在内存,整体是赚的。
- 防止OOM:配合后面要讲的OOM Killer看——有Swap,系统多一层缓冲,关键进程被误杀的概率小一点。
什么时候是掩耳盗铃
- 常驻内存需求超过物理内存:比如应用平时就要1.5G,你只有1G物理内存,指望Swap长期顶0.5G——系统会陷入频繁换页(thrashing),CPU全花在搬数据上,整机卡成PPT。这时候Swap不是解决方案,是止痛药,病还得加内存治。
- 磁盘本身就慢:Swap的体验直接取决于磁盘速度。NVMe盘上Swap还能忍,机械盘或超分严重的虚拟盘上,Swap一用就卡死。
- 数据库:MySQL这类对延迟敏感的进了Swap,查询直接雪崩。数据库服务器内存必须留够,指望Swap就是赌。
正确的加法
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
2G是给1-2G内存机器的常用值,Swap一般设为物理内存的1-2倍,超过4G意义不大。另外把swappiness调低(比如10),让系统尽量少用Swap,只在真不够时才用:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
一句话总结
Swap是安全气囊,不是座位;救急可以,当饭吃不行。长期内存不够,唯一的正解是加内存——年付差的那点钱,不值得拿整机卡顿去换。下一篇讲OOM Killer:内存真爆了,系统先杀谁?