Debian 11系统:轻松扩展交换空间,提升性能!
简介
在应用程序中防止内存溢出错误的一种有效方法是为服务器添加一些交换空间。本指南将详细介绍如何在Debian 11服务器上添加交换文件。
什么是交换空间 (Swap)?
交换空间是硬盘存储中专门为操作系统预留的一部分,用于暂时存储无法完全容纳在RAM(随机存取存储器)中的数据。通过利用交换空间,您可以有效增加服务器在工作内存中能够保存的信息量,但这其中也伴随着一些考量。
当RAM不足以容纳当前运行应用程序所需的数据时,硬盘上的交换空间将主要被操作系统使用。需要注意的是,数据写入硬盘的速度远低于写入RAM的速度。然而,操作系统会优先将正在运行的应用程序数据保留在RAM中,并利用交换空间来处理较旧或不常用的数据。总而言之,在系统RAM耗尽时,具备交换空间作为备用机制,可以有效对抗非SSD存储系统中可能出现的内存溢出异常,提供一层额外的安全保障。
第一步 – 检查系统的交换信息
在我们开始之前,首先需要检查系统是否已经配置了交换空间。系统可以存在多个交换文件或交换分区,但通常一个就足够了。
我们可以通过输入以下命令来查看系统是否已配置交换空间:
sudo swapon --show
如果您没有收到任何输出,这意味着您的系统当前没有可用的交换空间。
您还可以通过free
实用工具来验证是否存在活动的交换空间:
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
在“已挂载 (Mounted on)”栏中,带有“/”的设备(在此案例中为/dev/vda1
)代表我们的根文件系统。在此示例中,我们有足够的可用空间(仅使用了1.1G)。您的实际使用情况可能会有所不同。
关于交换空间适当大小的观点众多,它真正取决于个人偏好和应用程序需求。一般来说,与系统内存相等或两倍的交换空间是一个不错的起点。另一个经验法则是,如果您仅将其作为内存备用,超过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
我们的文件已成功创建,并分配了适当的空间。
第四步 – 启用交换文件
既然我们已经有了一个正确大小的文件,现在我们需要将其转换为交换空间。
首先,我们需要锁定文件的权限,只允许具有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
命令的输出,以证实我们的发现。
- 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
接下来,我们将回顾一些可以更新的设置,以调整我们的交换空间。
第六步 – 调整您的交换设置
在处理交换空间时,您可以配置几项选项,这些选项会对系统的性能产生影响。
调整 Swappiness 属性
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
完成编辑后,请保存并关闭文件。
调整缓存压力设置
优化Debian 11 上的vfs_cache_pressure设置
在Debian 11 系统中,除了调整swappiness
值,另一个值得关注的参数是vfs_cache_pressure
。这个设置决定了系统在缓存inode(索引节点)和dentry(目录项)信息时,优先回收其他类型数据缓存的比例。
简而言之,文件系统数据的访问是一个资源密集型过程,并且通常会被频繁请求,因此系统缓存这些信息能显著提升性能。您可以通过查询/proc
文件系统来查看当前的vfs_cache_pressure
值。
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
在/etc/sysctl.conf
(系统控制参数配置文件)文件的底部,添加以下一行代码来指定您的新值:
vm.vfs_cache_pressure=50
完成编辑后,保存并关闭文件。
结论
遵循本指南中的步骤,您可以为系统提供额外的缓冲空间,以应对可能导致内存溢出(OOM)异常的情况。交换空间在避免这些常见问题方面发挥着至关重要的作用。
如果您遇到内存不足的错误,或者发现您的系统无法正常运行所需的应用程序,最佳的解决方案通常是优化您的应用程序配置或考虑升级您的服务器硬件。