欢迎光临
我们一直在努力

如何在Debian 8上添加交换空间

介绍

防范应用程序内存不足错误的最简单方法之一是为服务器添加一些交换空间。 在本指南中,我们将介绍如何将交换文件添加到Debian 8服务器。

警告:虽然通常建议使用传统旋转硬盘驱动器的系统进行交换,但使用SSD交换可能会导致硬件随着时间的推移而出现问题。 出于这种考虑,我们不建议在DigitalOcean或任何其他使用SSD存储的提供商上启用交换。 这样做会影响您和您的邻居的底层硬件的可靠性。 本指南是为可能在其他地方使用旋转磁盘系统的用户提供的参考。

如果您需要在DigitalOcean上提高服务器的性能,我们建议您升级Droplet。 这将导致更好的结果,并将降低导致可能影响您的服务的硬件问题的可能性。

什么是交换?

交换是硬盘驱动器上的一个区域,它被指定为操作系统可以临时存储无法再保存在RAM中的数据的位置。 基本上,这使您能够增加服务器在其工作“内存”中保留的信息量,但有一些注意事项。 硬盘驱动器上的交换空间将主要用于RAM中不再有足够空间来保存正在使用的应用程序数据。

写入磁盘的信息将比RAM中保存的信息慢得多,但操作系统更愿意在内存中运行应用程序数据,并使用交换旧数据。 总的来说,将交换空间作为系统RAM耗尽时的后备空间,可以很好地防范具有非SSD存储的系统上的内存不足异常。

第1步 – 检查系统的交换信息

在开始之前,我们可以检查系统是否已经有一些可用的交换空间。 可以有多个交换文件或交换分区,但通常一个就足够了。

我们可以通过键入以下内容来查看系统是否已配置任

sudo swapon --show

如果您没有收到任何输出,这意味着您的系统当前没有可用的交换空间。

您可以使用free实用程序验证没有活动交换:

free -h
             total       used       free     shared    buffers     cachedMem:          1.0G       331M       668M       4.3M        11M       276M-/+ buffers/cache:        44M       955MSwap:           0B         0B         0B

正如您在输出的Swap行中看到的那样,系统上没有活动交换。

第2步 – 检查硬盘驱动器分区上的可用空间

在我们创建交换文件之前,我们将检查当前的磁盘使用情况,以确保我们有足够的空间。 通过输入:

df -h
Filesystem      Size  Used Avail Use% Mounted on/dev/vda1        25G  946M   23G   4% /udev             10M     0   10M   0% /devtmpfs           201M  4.3M  196M   3% /runtmpfs           501M     0  501M   0% /dev/shmtmpfs           5.0M     0  5.0M   0% /run/locktmpfs           501M     0  501M   0% /sys/fs/cgrouptmpfs           101M     0  101M   0% /run/user/1001

在这种情况下,带有/Mounted on列上的设备是我们的磁盘。 在这个例子中我们有足够的空间(仅使用946M)。 您的使用可能会有所不同。

虽然对于交换空间的适当大小有很多意见,但这实际上取决于您的个人偏好和您的应用程序要求。 通常,等于或加倍系统RAM的量是一个很好的起点。 另一个好的经验法则是,如果您只是将其用作RAM后备,那么任何超过4G的交换都可能是不必要的。

第3步 – 创建交换文件

现在我们知道了可用的硬盘空间,我们可以在文件系统中创建一个交换文件。

我们将在根目录(/)中创建一个名为swapfile的文件。 该文件必须为我们的交换文件分配我们想要的空间量。 有两种主要方法:

传统的,缓慢的方式

传统上,我们将使用dd命令创建具有预分配空间的文件。 这个多功能磁盘实用程序从一个位置写入另一个位置。

我们可以使用它从位于/dev/zero Linux系统中的特殊设备向文件写入零,该系统只会根据请求吐出多个零。

我们使用块的大小和块count的组合来指定文件大小。 我们为每个参数分配的内容几乎完全是任意的。 重要的是它们乘以它们的产物是什么。

例如,在我们的示例中,我们正在寻找创建1千兆字节的文件。 我们可以通过指定1兆字节的块大小和1024的计数来完成此操作:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
1024+0 records in1024+0 records out1073741824 bytes (1.1 GB) copied, 1.36622 s, 786 MB/s

在按ENTER之前检查您的命令,因为如果您将(指示输出文件)指向错误的位置,则可能会破坏数据。

我们可以通过输入以下内容看到已经分配了1千兆字节:

ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G May 30 15:07 /swapfile

如果您已完成上述命令,您可能会注意到它花了几秒钟。 这个小型交换文件只有1.3秒,但对于速度较慢的硬盘驱动器上的较大文件,这可能会显着增加。

如果您想学习如何更快地创建文件,请使用sudo rm /swapfile删除文件交换文件,然后按照以下步骤操作:

更快的方式

获取同一文件的更快捷方法是使用fallocate程序。 请注意,此命令仅适用于更现代的文件系统,因此,如果您使用的是ext3系统,则此选项不可用。

fallocate命令立即创建一个预分配大小的文件,而不必实际写入虚拟内容。

我们可以输入以下内容创建1 GB的文件:

sudo fallocate -l 1G /swapfile

提示将立即返回给您。 我们可以通过输入以下内容来验证是否保留了正确的空间量:

ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G May 30 15:07 /swapfile

如您所见,我们的文件创建时留出了正确的空间量。

第4步 – 启用交换文件

现在我们有一个正确大小的文件,我们需要实际将其转换为交换空间。

首先,我们需要锁定文件的权限,以便只有具有root权限的用户才能读取内容。 这可以防止普通用户访问该文件,这会产生严重的安全隐患。

通过键入以下内容使该文件只能由root访问:

sudo chmod 600 /swapfile

键入以下命令验证权限更改:

ls -lh /swapfile
-rw------- 1 root root 1.0G May 29 17:34 /swapfile

如您所见,只有root用户启用了读写标志。

我们现在可以通过输入以下内容将文件标记为交换空间

sudo mkswap /swapfile
Setting up swapspace version 1, size = 1048572 KiBno label, UUID=757ee0b7-db04-46bd-aafb-adf6954ea077

标记文件后,我们可以启用交换文件,允许我们的系统开始使用它:

sudo swapon /swapfile

输入以下内容验证交换是否可用:

sudo swapon --show
NAME      TYPE  SIZE USED PRIO/swapfile file 1024M   0B   -1

我们可以再次检查free工具的输出,以证实我们的发现:

free -h
             total       used       free     shared    buffers     cachedMem:          1.0G       925M        74M       4.3M        13M       848M-/+ buffers/cache:        63M       936MSwap:         1.0G         0B       1.0G

我们的交换已成功设置,我们的操作系统将在必要时开始使用它。

第5步 – 使交换文件永久化

我们最近的更改已启用当前会话的交换文件。 但是,如果我们重新启动,服务器将不会自动保留交换设置。 我们可以通过将交换文件添加到/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属性

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

在底部,您可以添加:

/etc/sysctl.conf中
vm.swappiness=10

完成后保存并关闭文件。

调整缓存压力设置

您可能想要修改的另一个相关值是vfs_cache_pressure 此设置配置系统将选择多少缓存inodedentry信息而不是其他数据。

基本上,这是关于文件系统的访问数据。 这通常是非常昂贵的查询和非常频繁的请求,所以这是您的系统缓存的一个很好的事情。 您可以通过再次查询proc文件系统来查看当前值:

cat /proc/sys/vm/vfs_cache_pressure
100

由于它当前已配置,我们的系统会过快地从缓存中删除inode信息。 我们可以通过输入以下内容将其设置为更保守的设置(如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

完成后保存并关闭文件。

结论

按照本指南中的步骤将为您提供一些Wheezy空间,否则会导致内存不足异常。 交换空间在避免一些常见问题方面非常有用。

如果遇到OOM(内存不足)错误,或者如果发现系统无法使用所需的应用程序,最佳解决方案是优化应用程序配置或升级服务器。

赞(0) 打赏
未经允许不得转载:老赵部落 » 如何在Debian 8上添加交换空间

评论 抢沙发