如何在Debian 11 上增加交换空间
简介
在应用程序中防止内存溢出错误的一种方法是为服务器添加一些交换空间。在本指南中,我们将介绍如何为Debian 11服务器添加交换文件。
什么是Swap? shì Swap?)
交换空间是硬盘存储中为操作系统暂时存储无法容纳在RAM中的数据而设立的一部分。这样,您可以增加服务器在工作内存中保存信息的数量,但其中有一些注意事项。当RAM中没有足够的空间来容纳正在使用的应用程序数据时,硬盘上的交换空间将主要被使用。
信息写入磁盘的速度将明显慢于保存在RAM中的信息,但操作系统会更倾向于保持运行中的应用程序数据在内存中,并使用交换空间来处理旧数据。总体而言,在系统RAM耗尽时,具备交换空间作为备用可以成为一种对抗非SSD存储系统中的内存溢出异常的安全措施。
第一步 – 检查系统的交换信息
在我们开始之前,我们可以检查系统是否已经可用一些交换空间。可以存在多个交换文件或交换分区,但通常一个应该足够。
我们可以通过输入命令来查看系统是否配置了交换空间。
- sudo swapon –show
如果您没有收到任何输出,这意味着您的系统当前没有可用的交换空间。
您可以通过免费的实用工具来验证是否不存在活动的swap。
- free -h
total used free shared buff/cache available Mem: 976Mi 75Mi 623Mi 0.0Ki 276Mi 765Mi Swap: 0B 0B 0B
就像你可以在输出中看到的,在系统上没有激活的交换。
第二步 – 检查硬盘分区上的可用空间
在我们创建交换文件之前,我们将检查当前磁盘使用情况,以确保我们有足够的空间。输入以下命令来进行检查:
- df -h
Filesystem Size Used Avail Use% Mounted on udev 472M 0 472M 0% /dev tmpfs 98M 500K 98M 1% /run /dev/vda1 25G 1.1G 23G 5% / tmpfs 489M 0 489M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/vda15 124M 5.9M 118M 5% /boot/efi tmpfs 98M 0 98M 0% /run/user/0
在“已挂载”栏中,带有/的设备在此案例中代表我们的磁盘。在此示例中,我们有足够的可用空间(仅使用1.4G)。您的使用情况可能会有所不同。
虽然关于交换空间适当大小有很多不同观点,但它真正取决于个人偏好和应用需求。一般来说,与系统的内存相等或两倍的交换空间是个不错的起点。另一个经验法则是,如果你仅将其作为内存备用,超过4G的交换空间可能是不必要的。
第三步-创建交换文件
既然我们知道了可用的硬盘空间,我们可以在文件系统上创建一个交换文件。我们将在根目录(/)下分配一个我们想要大小的名为swapfile的文件。
创建交换文件的最佳方法是使用fallocate程序。该命令可以立即创建指定大小的文件。
由于示例中的服务器具有1G的RAM,因此我们将在本指南中创建一个1G的文件。根据您自己的服务器需求进行调整。
- sudo fallocate -l 1G /swapfile
我们可以通过输入来验证已经正确预留了适当的空间数量。
- ls -lh /swapfile
- -rw-r–r– 1 root root 1.0G Aug 23 11:14 /swapfile
我们的文件已经创建成功,并分配了适当的空间。
步骤4 – 启用交换文件
既然我们已经有了一个正确大小的文件,现在我们需要将其转换为交换空间。
首先,我们需要锁定文件的权限,只允许具有 root 权限的用户读取文件内容。这样做可以防止普通用户访问文件,从而避免造成重大的安全隐患。
通过输入以下命令,将文件仅限制为root用户访问:
- sudo chmod 600 /swapfile
通过输入进行权限更改进行验证。
- ls -lh /swapfile
-rw——- 1 root root 1.0G Aug 23 11:14 /swapfile
正如您所见,只有root用户拥有读取和写入标志。
现在我们可以通过输入命令来将文件标记为交换空间:
- sudo mkswap /swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
在标记文件后,我们可以启用交换文件,使我们的系统开始使用它。
- sudo swapon /swapfile
通过输入验证,确认交换是可用的。
- sudo swapon –show
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2
我们可以再次检查免费工具的输出以证实我们的发现。
- free -h
total used free shared buff/cache available Mem: 976Mi 85Mi 612Mi 0.0Ki 279Mi 756Mi Swap: 1.0Gi 0B 1.0Gi
我们的交换已经成功设置好了,我们的操作系统将会根据需要开始使用它。
第五步 – 使交换文件永久化
我们最近的更改已经为当前会话启用了交换文件。但是,如果我们重新启动,服务器将不会自动保留交换设置。我们可以通过将交换文件添加到我们的/etc/fstab文件来更改这一点。
如果出现问题,请备份/etc/fstab文件。
- sudo cp /etc/fstab /etc/fstab.bak
在您的/etc/fstab文件的末尾添加互换文件信息,输入以下内容:
- echo ‘/swapfile none swap sw 0 0’ | sudo tee -a /etc/fstab
接下来,我们将回顾一些我们可以更新的设置,以调整我们的交换空间。
步骤6 – 调整您的交换设置。
在处理交换时,您可以配置几项选项,这些选项会对系统的性能产生影响。
调整Swappiness属性
可交换性参数配置了系统将数据从RAM交换到交换空间的频率。这是一个介于0到100之间的表示百分比的值。
只有在绝对必要的情况下,当数值接近零时,内核才会将数据换出到磁盘。记住,与交换文件的互动是“代价高昂”的,因为与RAM的互动比起来,它们需要更长的时间,并且可能会导致性能显著降低。通常来说,告诉系统不要过多依赖交换文件会使系统更快。
数值接近100的值将尝试更多地将数据放入交换区,以保持更多的RAM空间空闲。根据您的应用程序的内存配置文件或服务器用途,这在某些情况下可能更好。
我们可以通过输入以下命令来查看当前的swappiness值:
- cat /proc/sys/vm/swappiness
60
对于桌面电脑而言,将swappiness设置为60并不是一个坏的值。对于服务器,你可能更希望将其调整接近于0。
我们可以使用sysctl命令将swappiness设置为不同的值。
例如,要将swappiness设置为10,我们可以键入:
- sudo sysctl vm.swappiness=10
vm.swappiness = 10
这个设置将在下次重启之前持续保持。我们可以通过将以下行添加到我们的 /etc/sysctl.conf 文件中,在重启时自动设置这个值。
- sudo nano /etc/sysctl.conf
在底部,您可以添加:
vm.swappiness=10
当你完成时,请保存并关闭文件。
调整缓存压力设置
你可能想要修改的另一个相关值是 vfs_cache_pressure。这个设置可以配置系统在缓存inode和dentry信息时优先选择其他数据的比例。
基本上,这是访问文件系统数据的过程。这通常非常耗费资源,而且频繁被请求,所以对于系统来说缓存起来是很好的。您可以通过再次查询/proc文件系统来查看当前值。
- cat /proc/sys/vm/vfs_cache_pressure
100
当前系统配置下,我们的缓存过快地移除了索引节点信息。我们可以通过输入以下命令将其设置为更为保守的值,例如50。
- sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50
再说一遍,这仅在我们当前的会话中有效。我们可以通过将其添加到配置文件中,就像我们在调整swappiness设置时所做的那样,来修改这一点。
- sudo nano /etc/sysctl.conf
在底部,添加一行指定你的新值的代码。
vm.vfs_cache_pressure=50
当你完成后,保存并关闭文件。
结论是
按照本指南中的步骤操作,可以在可能导致内存溢出异常的情况下为您提供一些缓冲空间。交换空间在避免这些常见问题方面非常有用。
如果你遇到了内存不足的错误,或者发现你的系统无法使用所需的应用程序,最好的解决方案是优化你的应用程序配置或升级你的服务器。