本文最后更新于38 天前,其中的信息可能已经过时,如有错误请发送邮件到likethedramaallthetime@gmail.com
文章来源
蒟蒻的ECS在某些时刻或者部署新项目的时候,IOPS读取会飙升,导致ECS无响应。虽然重启能解决暂时的问题,但是蒟蒻还是受不了了,于是搜索到解决的办法。
原文:ECS磁盘使用率异常升高,BPS,IOPS飙升-阿里云开发者社区
出现该问题的原因
磁盘使用率原因大概率是ECS没有配置swap,因此一旦内存使用率过高,就会疯狂写入磁盘,具体原理不太清楚。
解决办法
首先创建交换分区:
mkdir -v /var/cache/swap
cd /var/cache/swap
sudo dd if=/dev/zero of=swapfile bs=1K count=4M
sudo mkswap swapfile
sudo chmod 600 swapfile
sudo swapon swapfile
echo "/var/cache/swap/swapfile none swap sw 0 0" | tee -a /etc/fstab
然后修改磁盘设置:
#查看当前 swappiness 值,默认都是0
cat /proc/sys/vm/swappiness
# 修改swappiness值,在文件末尾添加#vm.swappiness=10
vi /etc/sysctl.conf
#让配置生效
sudo sysctl -p
看不懂没事,能用就行。下文提供ChatGPT 4o的解释。
解释
一、创建交换分区(Swap File)
mkdir -v /var/cache/swa
- 创建一个目录
/var/cache/swap
用来存放交换文件(swapfile)。-v
表示显示详细创建过程。
cd /var/cache/swa
- 进入刚刚创建的目录。
sudo dd if=/dev/zero of=swapfile bs=1K count=4M
- 使用
dd
命令创建一个名为swapfile
的文件。if=/dev/zero
: 输入数据来自/dev/zero
(持续输出 0 的设备文件)of=swapfile
: 输出文件为swapfile
bs=1K
: 每个块大小为 1KBcount=4M
: 总共写入 4M 块,即大约 4GB 大小
sudo mkswap swapfile
- 把这个文件格式化为交换空间。
sudo chmod 600 swapfile
- 设置
swapfile
文件权限为仅限root
用户读写(防止其他用户读取或写入)。
sudo swapon swapfile
- 启用这个交换文件,使其立即生效。
echo "/var/cache/swap/swapfile none swap sw 0 0" | tee -a /etc/fstab
- 将该交换文件添加到
/etc/fstab
文件中,以便系统重启后自动启用。
二、修改磁盘换页策略(swappiness)
cat /proc/sys/vm/swappiness
- 查看当前系统的
swappiness
值(决定系统使用 swap 的积极程度,默认是 60 或某些系统是 0)。
vi /etc/sysctl.conf
- 编辑内核参数配置文件。
在文件末尾添加一行:
vm.swappiness=10
- 表示将
swappiness
设置为 10,表示尽量使用物理内存,仅在内存压力较大时才使用 swap(推荐值)。
sudo sysctl -p
- 让修改的参数立即生效,无需重启。
总结
这组命令的作用是:
✅ 创建一个 4GB 的交换空间文件
✅ 启用它并设置开机自动挂载
✅ 优化内存换页策略,使系统更少使用交换空间,提高性能(通过 vm.swappiness=10
)
适用于物理内存较小或有偶尔内存溢出风险的系统,比如轻量级服务器或 VPS。