Linux 配置 Swap 交换空间

Swap的概念

swap分区的作用可简单描述为: 当系统的物理内存不够用的时候, 就需要将物理内存中的一部分空间释放出来, 以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序, 这些被释放的空间被临时保存到swap分区中, 等到那些程序要运行时, 再从swap分区中恢复保存的数据到内存中。这样, 系统总是在物理内存不够时, 才进行swap分区交换。其实, swap分区的调整对Linux服务器, 特别是Web服务器的性能至关重要。通过调整swap分区, 有时可以越过系统性能瓶颈, 节省系统升级费用。

建议划分的Swap分区大小

分配太多的swap分区会浪费硬盘空间, 而swap分区太小, 如果系统的物理内存用完了, 系统就会运行得很慢, 但仍能运行;如果swap分区用完了, 系统就会发生错误。例如, Web服务器能根据不同的请求数量衍生出多个服务进程(或线程), 如果swap分区用完了, 则服务进程无法启动, 通常会出现application is out of memory的错误, 严重时会造成服务进程的死锁。因此, swap分区的分配是很重要的。

通常情况下, swap分区应大于或等于物理内存的大小, 一般官方文档会建议swap分区的大小应是物理内存的2倍。但现在的服务器动不动就是16GB/32GB内存, 是不是swap分区也要扩大到32GB/64GB?其实, 大可不必。根据服务器实际负载、运行情况及未来可能的应用来综合考虑swap分区的大小即可, 如桌面系统, 则只需要较小的swap分区;而服务器系统, 尤其是数据库服务器和Web服务器, 则对swap分区要求较高。推荐的swap分区设置如下:

  • 4GB或4GB以下内存的系统, 最少需要2GB swap分区。
  • 大于4GB而小于16GB内存的系统, 最少需要4GB swap分区。
  • 大于16GB而小于64GB内存的系统, 最少需要8GB swap分区。
  • 大于64GB而小于256GB内存的系统, 最少需要16GB swap分区。

swap分区设置过大只是对硬盘空间的浪费, 而对系统性能不会产生太大的影响

操作

以下命令需要在root权限下执行

创建swap分区

  1. 查看内存使用情况: free -h
    Alt text

  2. 创建swap分区文件: sudo fallocate -l 8G /swapfile

  3. 修改分区文件权限: sudo chmod 600 /swapfile
    Alt text

  4. 格式化swap分区文件: sudo mkswap /swapfile
    Alt text

  5. 启用swap交换分区sudo swapon /swapfile

  6. 验证配置: free -h
    Alt text

  7. 开机自动挂载: echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab

调整swappiness

Swappiness是Linux操作系统中一个参数,用于控制系统在内存不足时将数据转移到交换空间的速度。这个参数的取值范围是0到100,数值越大表示系统更倾向于使用swap来释放物理内存,数值越小则表示尽量避免使用swap。Ubuntu 桌面版中默认的 swappiness 是60,而服务器版本中的默认 wappiness 是1,原因是 swap 比 RAM 慢,服务器为了获得更好的性能,应尽可能多地利用 RAM。

使用此命令查看 swappiness 的值:

1
cat /proc/sys/vm/swappiness

使用此命令临时修改 swappiness 的值:

1
sudo sysctl vm.swappiness=25

使用此命令永久修改 swappiness 的值:

1
echo "vm.swappiness=25" | sudo tee -a /etc/sysctl.conf

移除swap分区

  1. 禁用swap分区: sudo swapoff /swapfile

  2. 删除/swapfile分区: sudo rm /swapfile

  3. 手动注释开机自动挂载条目: sudo vim /etc/fstab

  4. 验证配置: free -h

参考书籍::

  1. 《细说Linux基础知识》, 兄弟连教育