阿里云ECS使用宝塔面板开启SWAP并配置swappiness参数避免因内存不够宕机的完整教程

吴 昊
吴 昊
吴 昊
编辑
69
文章
0
粉丝
Linux评论2字数 1003阅读3分20秒阅读模式

起因:

随着Centos系统官方宣布停止维护,宝塔面板官方也将主要推荐运行系统改为了Debian12。按理说Debian对机器配置要求低一些。但博主使用阿里云ECS在同样的配置下,经常遇到宕机情况。经ECS健康诊断排查,出现宕机情况时,出现异常项清单报错,内容如下:

【严重】实例云盘读写受限

该实例出现磁盘 IO 读写受限,可能影响业务正常运行

异常详情

该实例在 2026年X月XX日 21:00:00 出现磁盘 IO 读写受限,请检查业务与磁盘性能是否相匹配,并根据业务按需升级云盘规格(若达到实例规格上限时,需要同步升级实例规格)。

经最终锁定问题:

1、阿里云ECS内存长时间不足会触发内核kswap机制,该机制类似于swap交换分区。只是这个kswap是内核触发,内核为了保护自己的运行正常不会因为内存被强占导致内核崩溃,所以会在内存不足时触发kswap脏页交换。将内存脏页刷写到磁盘中,从而引起的磁盘读写BPS超限,因为不论如何刷写当时的内存都是不足的,程序侧依然还在频繁调用,从而引发了恶性循环导致系统负载升高,BPS持续打满,引发系统夯死。

2、在宝塔面板(v12.0.0)里,使用命令:

cat /proc/sys/vm/swappiness

查询出数值为“0”

原因是宝塔官方运维认为“本来就是虚拟机,再使用虚拟内存,那就更慢了。”(我真的哭死,强烈建议宝塔在Linux工具箱的“Swap/虚拟内存”增加个swappiness参数,那句“若您不需要swap,请将容量设为0”导致我总以为配置了容量,而且偶尔能看到系统有使用就算正确开启了SWAP。哪知道swappiness参数0是最大程度使用ECS内存的罪魁祸首。)

解决方案:

方案一:修改swappiness参数,提高使用虚拟内存权重,命令如下:

1、检查当前swappiness参数,执行命令如下:

cat /proc/sys/vm/swappiness

*宝塔面板一般默认值是“0”,看见不要惊讶!!!

2、永久修改swappiness参数,执行命令如下:

echo "vm.swappiness=30" >> /etc/sysctl.conf

*该代码里的“30”,是博主使用的参数!你可以改成0-100任意值。0代表尽量使用机器内存,100代表尽最大程度提高虚拟内存使用,但毕竟SWAP是放在储存盘里的虚拟内存,不如ECS购买的运存速度快。数值越大,爆内存的情况能缓解,但程序运行的速度会下降,所以“适当”很重要。

*阿里云购买ECS时的加带SWAP,官方默认swappiness参数是“60”。但可参考如下进行设置:

应用场景 推荐swappiness值
数据库 (MySQL, PostgreSQL) 1-10
内存数据库 (Redis, Memcached) 1
Web应用服务器 (Nginx, Apache) 10-60
阿里云ECS镜像安装的SWAP默认值 60

3、重载配置(使其生效)

sysctl -p

4、检查是否生效(再次确认)

cat /proc/sys/vm/swappiness

*看是不是你修改成的那个数值了,如果是就成功了!(如果有强迫症,还可以重启一下ECS!)

*如果还是“0”,没成功,检查服务器“/etc/sysctl.conf”文件有没有读写权限(如果开启了“宝塔系统加固”,可能需要临时关闭一下相关功能)。然后再重新执行一次上面的步骤!(依然,如果有强迫症,还可以重启一下ECS!)

方案二:升级ECS实例配置(如果配置了swappiness参数,还是因为内存宕机的话!只能乖乖升配置了!)

 

纯新手,各操作步骤图文教程如下:

一、环境约定

系统:Debian12

宝塔面板:稳定版 12.0.0

二、各步骤图文演示

输入验证码查看隐藏内容
扫描二维码关注本站抖音号 锄地者
或者在微信视频号里搜索关注 锄地者
回复 回复关键字 获取验证码
阿里云ECS使用宝塔面板开启SWAP并配置swappiness参数避免因内存不够宕机的完整教程 锄地者

继续阅读
我的微信视频号
微信扫一扫关注
weinxin
我的微信
微信号已复制
我的抖音号
抖音扫一扫关注
weinxin
我的公众号
公众号已复制
 
吴 昊
  • 本文由 吴 昊 发表于2026年10月6日 01:17:05
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
匿名

发表评论

匿名网友
确定

拖动滑块以完成验证