内存不足时——添加交换空间(Swap)
内存(RAM)不足时,程序会突然退出(Killed),或者服务器会变得像卡住一样缓慢。Swap 是将部分磁盘用作应急内存的功能,可以在内存暂时不足时防止程序被强制关闭。
Swap 比实际内存慢得多。如果内存总是不够,Swap 只是权宜之计,迁移到内存更大的套餐才是根本的解决办法。迁移到新服务器
1. 确认内存是否不足
free -h
- 如果
Mem:行的available值几乎为 0,说明内存不足。 - 如果
Swap:行全部为 0,说明没有 Swap。
程序是否因内存不足而被强制终止,可以用以下命令确认。
sudo dmesg | grep -i "out of memory"
如果有输出,说明曾有程序因内存不足(OOM)而被终止。
2. 创建 Swap 文件(Ubuntu、Debian)
以下是创建 2GB Swap 的示例。如果内存在 4GB 以下,设为与内存相同的大小;如果内存更大,2~4GB 就足够了。请先用 df -h 确认磁盘剩余空间是否充足。
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
再次执行 free -h 时,如果 Swap: 行显示 2.0Gi,即表示成功。
3. 设置为重启后仍然保留
按现在的状态,重启后 Swap 会关闭。请将其注册为开机时自动开启。
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
4. 调整为少用 Swap(可选)
默认设置下,即使内存还有剩余,也会使用相当多的 Swap。按如下方式修改后,只有在内存真正不足时才会使用 Swap。
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system
如果想删除 Swap
sudo swapoff /swapfile
sudo rm /swapfile
然后用 sudo nano /etc/fstab 打开文件,删除以 /swapfile 开头的行并保存。
Windows 服务器呢?
Windows 默认以“分页文件”的名称设置了 Swap,无需另外创建。如果内存不足,请在任务管理器(Ctrl + Shift + Esc)→ 进程 标签页中查看占用内存较多的程序。更详细的排查方法请参考服务器变慢时的排查。