目 录CONTENT

文章目录

低内存阿里云服务器搭建网站CPU、磁盘读取BPS异常问题解决方案

成培培
2024-11-27 / 0 评论 / 0 点赞 / 179 阅读 / 0 字

接着上篇博客(https://www.chengpei.top/archives/aliyun-ecs-exception),我在2C2G的阿里云服务器上搭建了博客,但是在服务器内存满载的情况下,服务器出现CPU占用异常、磁盘读取BPS异常的问题,并且ssh无法登录的问题,当然最直接的方案当然是加购内存,奈何家境贫寒搭建个博客而已不愿再多付出成本,于是开始寻找其他解决方案。

异常复现

上篇博客提到CPU、磁盘读取异常的原因可能是内存占用满了,导致系统频繁使用 swap(交换分区)进行内存交换,导致 CPU、BPS 和 IOPS 增高。但是这也只是我的猜测,具体情况我准备直接给服务器加压看是否可以得到复现,于是我在服务器上启动了一个Java服务并且持续调用,很快内存暂用就超过了90%,手机也及时收到了告警短信,说明昨天博客里配置的报警规则是有效的,紧接着服务器上响应明显变慢,CPU磁盘读取开始迅速上升,服务器load很高

解决方案

异常得到了复现,同时我在htop里观察到Swap并没有启用,全部使用的都是物理内存,所以想到如果我启用虚拟内存,是不是能缓解这种情况,于是在阿里云上找到一篇文档添加swap分区的方法,具体操作如下:

# 创建swap文件夹
sudo mkdir -v /var/cache/swap
# 进入swap文件夹
cd /var/cache/swap
# 创建swap文件,1K * 4M,大概会创建4G大小的虚拟内存文件
sudo dd if=/dev/zero of=swapfile bs=1K count=4M
# 将新建的文件转换为swap文件
sudo mkswap swapfile
# 给文件授权
sudo chmod 600 swapfile
# 启用swap分区
sudo swapon swapfile
# 将该分区设置成开机自启
echo "/var/cache/swap/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab

完成以上设置后,编辑/etc/sysctl.conf文件,修改vm.swappiness值为30,相当于当物理内存超过60%就开始使用swap分区,执行sudo sysctl -p 加载修改

完成所有设置后,再次给服务器加压,以下是服务器资源变化

九点半左右的情况是swap设置之前,加压导致cpu、读取字节居高不下,10点左右是设置了swap之后,虽然cpu、磁盘io依旧有波动,但是也是在我加压情况下的正常波动,服务器load也没有升高,响应也正常了,物理内存占用甚至下降了,因为有30%的内存进入到了虚拟内存,服务器也没有明显的卡顿现象,虽然虚拟内存的使用可能会导致系统性能下降,毕竟内存数据放磁盘上了,读写肯定会慢很多,但是对于我来说系统没有挂掉应该很好了,这次优化非常满意了

0

评论区