内存不足问题发现

最近在写项目的时候,因为 VS code 安装了较多的插件,我发现系统运行时的内存占用明显上升。这带来了一系列问题:服务器压力过大,频繁杀掉 vscode-server 导致连接中断,甚至在执行 make 命令后,连 SSH 都无法登录,需要等待一段时间才能恢复正常。

经过研究,我找到了一个临时缓解方案 —— 设置 Swap 交换分区。当然,这只是权宜之计,如果想要彻底解决问题,最终还是需要升级服务器配置,也就是 “花钱解决问题”。

什么是 Swap 分区?

Swap 分区(交换分区)是 Linux 系统中的一块磁盘空间,当物理内存不足时,系统会将一部分不常用的内存数据转移到 Swap 分区,从而释放物理内存给更需要的程序使用。这有点像 Windows 系统中的虚拟内存。

如何设置 Swap 分区

1. 查看当前 Swap 分区情况

首先检查系统是否已经有 Swap 分区,以及当前的内存使用情况:

free -h

如果 Swap 那一栏显示为 0,则表示没有开启 Swap 分区。

2. 查看磁盘空间

需要找到有足够空间的磁盘分区来创建 Swap 文件,一般云服务器的根目录/下空间较为充足:

df -h

3. 创建 Swap 文件

在根目录下创建一个专门的 swap 目录,并在其中生成 swap 文件:

cd /
sudo mkdir swap
cd swap
# 创建一个2GB的swap文件(bs=2M,count=1024,2M*1024=2048M=2GB)
sudo dd if=/dev/zero of=swap-disk bs=2M count=1024 
# 设置合适的权限
sudo chmod 600 swap-disk

注意:这里创建的是 2GB 的 Swap 文件,建议设置为物理内存大小或一半。如果你的内存是 4GB,可以设置 2GB 或 4GB 的 Swap。

4. 将普通文件转换为交换分区文件

sudo mkswap swap-disk

5. 激活 Swap 分区

sudo swapon swap-disk

如果执行此步骤时出现 “磁盘忙碌” 错误,可以先停用 Swap 分区再重新激活:

sudo swapoff /swap/swap-disk
sudo swapon swap-disk

6. 验证 Swap 分区是否生效

再次执行查看命令,确认 Swap 分区已经激活:

free -h

7. 设置开机自动挂载 Swap 分区

为了让 Swap 分区在服务器重启后仍然有效,需要将其添加到开机自动挂载列表:

sudo vim /etc/fstab

在文件末尾追加以下内容:

/swap/swap-disk swap swap defaults 0 0

保存并退出编辑器,这样 Swap 分区就会在系统启动时自动激活了。

如何停用和删除 Swap 分区

如果需要停用或删除已创建的 Swap 分区,可以执行以下命令:

# 停用Swap分区
sudo swapoff /swap/swap-disk

# 删除Swap分区文件和目录
sudo rm -rf /swap/

同时,记得从/etc/fstab文件中删除之前添加的那一行配置。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐