1GB内存的VPS跑MySQL+PHP+Nginx,内存用满只是时间问题。加SWAP(虚拟内存)能让系统在内存不够时用磁盘当临时内存用。但它不是免费午餐——SSD的读写速度比内存慢几十倍,SWAP用多了系统卡成狗。
什么时候该加SWAP
SWAP是保险绳不是扩展内存。当你偶尔内存峰值高出物理内存一点点(比如编译代码、定时任务跑备份脚本),SWAP帮你兜住不让OOM Killer杀进程。当你日常内存占用就超过物理内存,SWAP救不了——大量SWAP读写会让性能雪崩。
# 看当前SWAP使用情况
free -h
swapon --show如果swapon显示已经有SWAP但free里SWAP used很少——够用了不用加。如果free里SWAP used接近SWAP total——该想办法增加物理内存或优化应用,SWAP加到上限也没用。
创建SWAP文件
# 创建一个2GB的SWAP文件
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# 持久化(重启后还在)
echo '/swapfile none swap sw 0 0' >> /etc/fstab
# 验证
free -h
swapon --show雨云入门VPS 1核1G内存,加1-2GB SWAP合理。优惠码 admin01 首月五折。
SWAP设多大合适
| VPS内存 | 建议SWAP大小 |
|---|---|
| 512MB | 1-2GB |
| 1GB | 1-2GB |
| 2GB | 2GB |
| 4GB及以上 | 2-4GB |
过时的”SWAP=2倍物理内存”规则不适用了。SWAP太大没意义——用满了系统也基本不可用了。
控制SWAP使用倾向
Linux有个swappiness参数控制系统使用SWAP的倾向——0(尽量不用SWAP)到100(积极用SWAP)。默认60。VPS建议设10-20:
echo 'vm.swappiness=15' >> /etc/sysctl.conf
sysctl -p
# 验证
cat /proc/sys/vm/swappinessswappiness=15的意思是系统在内存使用85%以上才开始用SWAP。你不会因为系统”过早”用到SWAP而体验卡顿。
SWAP vs 加物理内存
SWAP免费但慢(磁盘IO是内存的1/100)。物理内存月付几元但快。能加物理内存优先加——比如雨云从1G升到2G内存月费加几元。实在不能加再用SWAP兜底。
常见问题
加了SWAP后MySQL性能暴跌?
innodb_buffer_pool_size可能设得太大导致频繁SWAP。buffer_pool+应用内存总需求超过了物理内存。调小buffer_pool让总内存需求在物理内存范围内。
删掉SWAP文件怎么操作?
swapoff /swapfile → rm /swapfile → 从/etc/fstab里删对应行。确认free -h里SWAP total变0。
SWAP文件比SWAP分区好吗?
VPS上建议用SWAP文件——灵活、随时创建删除、不用重启。SWAP分区需要预先分配磁盘空间。性能差异可以忽略。






