VPS内存不够了加swap?SWAP配置、大小和性能代价说明

什么时候该加、创建SWAP文件、swappiness控制倾向和SWAP vs 加物理内存权衡
发布于
4

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/swappiness

swappiness=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分区需要预先分配磁盘空间。性能差异可以忽略。

本文由作者原创/授权发布于极跃圈(jiyueip.com),未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 / 600
0 讨论
热门最新
总结
暂无总结

暂无数据