https://www.digitalocean.com/...如何在Ubuntu18.04上添加交换空间BrianBoucheron内存错误最简单的方法之一是向服务器添加一些交换空间。在本指南中,我们将描述如何将交换文件添加到Ubuntu18.04服务器。警告:虽然通常建议对使用传统旋转硬盘驱动器的系统进行交换,但使用SSD交换可能会随着时间的推移导致硬件问题。因此,我们不建议在任何使用SSD存储的设备上启用交换。这样做会影响底层硬件的可靠性。本指南供可能在其他地方使用旋转磁盘系统的用户参考。什么是交换?交换区是硬盘驱动器上的一个区域,被指定为操作系统可以临时存储不能再保存在RAM中的数据的位置。基本上,这使您能够增加服务器在其工作“内存”中保存的信息量,但有一些注意事项。当RAM中不再有足够的空间来保存正在使用的应用程序数据时,将主要使用硬盘驱动器上的交换空间。写入磁盘的信息将比保存在RAM中的信息慢得多,但操作系统更喜欢在内存中运行应用程序数据,并使用交换旧数据。总的来说,当系统用完RAM时,将交换空间作为后备方案可以很好地防御非SSD存储系统上的内存不足异常。第1步-检查系统的交换信息在开始之前,我们可以检查系统是否已经有一些可用的交换空间。可以有多个交换文件或交换分区,但通常一个就足够了。我们可以通过键入sudoswapon--show查看系统是否已配置。如果您没有收到任何输出,则表示您的系统当前没有可用的交换空间。您可以使用free实用程序验证没有活动交换:free-h输出totalusedfreesharedbuff/cacheavailableMem:985M84M222M680K678M721MSwap:0B0B0B正如您在输出的Swap行中看到的,系统没有活跃的交易所。第2步-检查硬盘分区上的可用空间在我们创建交换文件之前,我们将检查当前磁盘使用情况以确保我们有足够的空间。通过输入:df-houtputFilesystemSizeUsedAvailUse%Mountedonudev481M0481M0%/devtmpfs99M656K98M1%/run/dev/vda125G1.4G23G6%/tmpfs493M0493M0%/dev/shmtmpfs5.0M05.0M0%/run/locktmpfs493M0493M0%/sys/fs/cgroup/dev/vda15105M3.4M102M4%/boot/efitmpfs99M099M0%/run/user/1000在这种情况下/,Mountedon栏中的设备就是我们的磁盘。在这个例子中我们有足够的空间(只使用了1.4G)。您的使用情况可能会有所不同。虽然对交换空间的适当大小有很多意见,但它实际上取决于您的个人偏好和您的应用程序要求。通常,等于或加倍系统RAM的数量是一个很好的起点。另一个好的经验法则是,如果您只是将它用作RAM备份,则可能不需要任何超过4G的交换。第3步-创建交换文件现在我们知道可用的硬盘空间,我们可以在文件系统上创建交换文件。我们将swapfile在根(/)目录中分配一个我们想要调用swap大小的文件。创建交换文件的最佳方法是使用fallocate程序。此命令立即创建指定大小的文件。由于我们示例中的服务器有1GRAM,因此我们将在本指南中创建1G文件。调整它以满足您自己的服务器的需要:sudofallocate-l1G/swapfile我们可以通过键入以下命令验证是否保留了正确的空间量:ls-lh/swapfile-rw-r--r--1rootroot1.0GApr2511:14/swapfile我们的文件是用正确的空间创建的。第4步-启用交换文件现在我们有了一个正确大小的文件,我们需要将它实际转换为交换空间。首先,我们需要锁定文件的权限,这样只有拥有root权限的用户才能读取内容。这会阻止普通用户访问该文件,从而造成严重的安全风险。通过键入以下命令使此文件只能由root用户访问:sudochmod600/swapfile通过键入以下命令验证权限更改:ls-lh/swapfileoutput-rw-------1rootroot1.0GApr2511:14/swapfile正如你可以看到,只有root用户开启了读写标志。我们现在可以通过键入sudomkswap/swapfileoutputtSettingupswapspaceversion1,size=1024MiB(1073737728bytes)nolabel,UUID=6e965805-2ab9-450f-aed6-577e74089dbf标记文件为交换空间标记文件后,我们可以启用交换文件,允许我们的系统开始使用它:sudoswapon/swapfile通过键入以下内容验证交换是否可用:sudoswapon--showoutputNAMETYPESIZEUSEDPRIO/swapfilefile1024M0B-2我们可以再次检查这个free该实用程序的输出证实了我们的发现:free-houtputtotalusedfreesharedbuff/cacheavailableMem:985M84M220M680K680M722MSwap:1.0G0B1.0G我们的交换已成功设置,我们的操作系统将开始使用它。第5步-使交换文件永久化我们最近的更改为当前会话启用了交换文件。但是,如果我们重新启动,服务器不会自动保留交换设置。我们可以通过将交换文件添加到我们的/etc/fstab文件来更改此设置。/etc/fstab如果出现任何问题,请备份文件:sudocp/etc/fstab/etc/fstab.bak/etc/fstab通过键入以下命令将交换文件信息添加到文件末尾:echo'/swapfilenoneswap开关00'|sudotee-a/etc/fstab接下来,我们将回顾一些可以更新以调整交换空间的设置。第6步-调整交换设置您可以配置一些选项,这些选项会在处理交换时影响系统的性能。调整Swappiness属性swappiness参数配置系统将数据从RAM交换到交换空间的频率。这是一个介于0和100之间的值,表示百分比。当该值接近于零时,除非绝对必要,否则内核不会将数据交换到磁盘。请记住,与交换文件的交互是“昂贵的”,因为它们比与RAM的交互花费更长的时间,并且它们会导致性能显着下降。告诉系统不要过分依赖交换通常会使您的系统更快。接近100的值将尝试将更多数据放在swap上,以努力保留更多RAM空间。根据应用程序的内存配置文件或服务器使用情况,在某些情况下可能会更好。我们可以通过键入以下命令查看当前的swappiness值:cat/proc/sys/vm/swappinessoutputs60对于桌面,60的swappiness设置不是一个坏值。对于服务器,您可能希望将其移近0。我们可以使用sysctl命令将swappiness设置为不同的值。例如,要将swappiness设置为10,我们可以键入:sudosysctlvm.swappiness=10outputvm.swappiness=10此设置将持续到下一次重新启动。我们可以通过在/etc/sysctl.conf文件中添加以下行来自动设置此值:sudonano/etc/sysctl.conf在/etc/sysctl.conf的底部,您可以添加:vm.swappiness=10保存时完成并关闭文件。调整缓存压力设置您可能想要修改的另一个相关值是vfs_cache_pressure。此设置配置系统将选择多少缓存inode和dentry信息而不是其他数据。基本上,这是关于文件系统的访问数据。这通常是一个非常昂贵的查询和一个非常频繁的请求,所以你的系统缓存是一件好事。您可以通过使用proc再次查询文件系统来查看当前值:cat/proc/sys/vm/vfs_cache_pressureoutputs100因为它是当前配置的,所以我们的系统从缓存中删除inode信息的速度太快了。我们可以通过键入以下命令将其设置为更保守的设置(如50):sudosysctlvm.vfs_cache_pressure=50outputsvm.vfs_cache_pressure=50同样,这仅适用于我们当前的会话。我们可以通过将其添加到配置文件来更改它,就像我们对swappiness设置所做的那样:sudonano/etc/sysctl.conf在/etc/sysctl.conf的底部,添加指定新值的行:vm。vfs_cache_pressure=50完成后保存并关闭文件。结论遵循本指南中的步骤将为您提供一些交换空间,否则会导致内存不足异常。交换空间对于避免一些常见问题非常有用。如果遇到OOM(OutofMemory)错误,或者发现系统无法使用所需的应用程序,最好的解决办法是优化应用程序配置或升级服务器。
