# 1. 什么是 Swap `Swap` 是硬盘存储的一部分,专门为操作系统预留,用于临时存储无法再保存在 RAM 中的数据。当 RAM 中不再有足够的空间来保存正在使用的应用程序数据时,将使用硬盘上的交换(Swap)空间。 但使用交换空间有一些代价,将信息写入磁盘将比将信息保存在 RAM 中慢得多,因此操作系统更倾向于将正在运行的应用程序数据保留在内存中,并使用交换空间来处理较旧的数据。 总的来说,在系统 RAM 耗尽时,拥有交换空间作为后备可以有效防止内存不足异常。 # 2. 检查当前是否有交换空间 通过以下命令检查当前环境是否配置了交换空间: ```bash swapon --show ``` 如果没有返回任何输出,这意味着系统当前没有可用的交换空间。也可以使用`free`程序验证没有活动的交换空间: ```bash free -h ``` 如果返回的`Swap`总大小为`0B`,则没有可用的交换空间,反之则会显示交换空间的大小。 # 3. 创建交换文件 创建交换文件的最佳方法是使用`fallocate`程序,此命令可快速的创建指定大小的文件。文件的大小建议与当前环境的物理内存相同,此处以在根目录创建`1G`大小的交换文件为例: ```bash fallocate -l 1G /swapfile ``` 创建完成后,可以执行以下命令验证是否正确创建了足够空间的文件 ```bash ls -lh /swapfile ``` # 4. 启用交换文件 将文件修改为只有`root`用户可访问: ```bash chmod 600 /swapfile ``` 通过输入以下命令将文件标记为交换空间: ```bash mkswap /swapfile ``` 启用交换文件: ```bash swapon /swapfile ``` 输入以下命令验证交换空间是否可用(也可以使用`free`命令): ```bash swapon --show ``` # 5. 持久化交换空间配置 备份`/etc/fstab`文件以防出现问题 ```bash cp /etc/fstab /etc/fstab.bak ``` 将交换文件信息添加到`/etc/fstab`文件末尾: ```bash echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab ``` # 6. 修改系统交换属性 `swappiness`参数配置系统将数据从`RAM`交换到交换空间的频率。这是一个介于`0`到`100`之间的值,表示百分比。当数值接近零时,内核将非必要不会交换数据到磁盘。请注意,读写交换文件相较于与`RAM`直接交互花费的时间长得多,可能导致性能显著下降。告诉系统不要过多依赖交换通常会使系统的运行速度更快。 可以通过输入以下命令查看当前的`swappiness`值: ```bash cat /proc/sys/vm/swappiness ``` 对于服务器,需要将其值更接近`0`,可以使用`sysctl`命令将`swappiness`设置为不同的值: ```bash sysctl vm.swappiness=10 ``` 如需要持久化配置,则需编辑`/etc/sysctl.conf`文件,修改其中的`vm.swappiness`属性值,如没有则在文件底部插入: ``` vm.swappiness=10 ``` Loading... # 1. 什么是 Swap `Swap` 是硬盘存储的一部分,专门为操作系统预留,用于临时存储无法再保存在 RAM 中的数据。当 RAM 中不再有足够的空间来保存正在使用的应用程序数据时,将使用硬盘上的交换(Swap)空间。 但使用交换空间有一些代价,将信息写入磁盘将比将信息保存在 RAM 中慢得多,因此操作系统更倾向于将正在运行的应用程序数据保留在内存中,并使用交换空间来处理较旧的数据。 总的来说,在系统 RAM 耗尽时,拥有交换空间作为后备可以有效防止内存不足异常。 # 2. 检查当前是否有交换空间 通过以下命令检查当前环境是否配置了交换空间: ```bash swapon --show ``` 如果没有返回任何输出,这意味着系统当前没有可用的交换空间。也可以使用`free`程序验证没有活动的交换空间: ```bash free -h ``` 如果返回的`Swap`总大小为`0B`,则没有可用的交换空间,反之则会显示交换空间的大小。 # 3. 创建交换文件 创建交换文件的最佳方法是使用`fallocate`程序,此命令可快速的创建指定大小的文件。文件的大小建议与当前环境的物理内存相同,此处以在根目录创建`1G`大小的交换文件为例: ```bash fallocate -l 1G /swapfile ``` 创建完成后,可以执行以下命令验证是否正确创建了足够空间的文件 ```bash ls -lh /swapfile ``` # 4. 启用交换文件 将文件修改为只有`root`用户可访问: ```bash chmod 600 /swapfile ``` 通过输入以下命令将文件标记为交换空间: ```bash mkswap /swapfile ``` 启用交换文件: ```bash swapon /swapfile ``` 输入以下命令验证交换空间是否可用(也可以使用`free`命令): ```bash swapon --show ``` # 5. 持久化交换空间配置 备份`/etc/fstab`文件以防出现问题 ```bash cp /etc/fstab /etc/fstab.bak ``` 将交换文件信息添加到`/etc/fstab`文件末尾: ```bash echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab ``` # 6. 修改系统交换属性 `swappiness`参数配置系统将数据从`RAM`交换到交换空间的频率。这是一个介于`0`到`100`之间的值,表示百分比。当数值接近零时,内核将非必要不会交换数据到磁盘。请注意,读写交换文件相较于与`RAM`直接交互花费的时间长得多,可能导致性能显著下降。告诉系统不要过多依赖交换通常会使系统的运行速度更快。 可以通过输入以下命令查看当前的`swappiness`值: ```bash cat /proc/sys/vm/swappiness ``` 对于服务器,需要将其值更接近`0`,可以使用`sysctl`命令将`swappiness`设置为不同的值: ```bash sysctl vm.swappiness=10 ``` 如需要持久化配置,则需编辑`/etc/sysctl.conf`文件,修改其中的`vm.swappiness`属性值,如没有则在文件底部插入: ``` vm.swappiness=10 ``` Last modification:January 10, 2025 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏