Linux 配置 Swap 交换空间
Linux 配置 Swap 交换空间
lololoweSwap的概念
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分区
查看内存使用情况:
free -h
创建swap分区文件:
sudo fallocate -l 8G /swapfile
修改分区文件权限:
sudo chmod 600 /swapfile
格式化swap分区文件:
sudo mkswap /swapfile
启用swap交换分区
sudo swapon /swapfile
验证配置:
free -h
开机自动挂载:
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分区
禁用swap分区:
sudo swapoff /swapfile
删除/swapfile分区:
sudo rm /swapfile
手动注释开机自动挂载条目:
sudo vim /etc/fstab
验证配置:
free -h
参考书籍::
- 《细说Linux基础知识》, 兄弟连教育