在Ubuntu18.04上添加交换空间的⽅法
如何在Ubuntu 18.04上添加交换空间Brian Boucheron
本教程的先前版本由Justin Ellingwood编写介绍
防范应⽤程序内存不⾜错误的最简单⽅法之⼀是为服务器添加⼀些交换空间。在本指南中,我们将介绍如何将交换⽂件添加到Ubuntu 18.04服务器。
警告 :虽然通常建议对使⽤传统旋转硬盘驱动器的系统进⾏交换,但使⽤SSD交换可能会导致硬件随着时间的推移⽽出现问题。出于这种考虑,我们不建议在任何使⽤SSD存储的上启⽤交换。这样做会影响您的底层硬件的可靠性。本指南是为可能在其他地⽅使⽤旋转磁盘系统的⽤户提供的参考。什么是交换?
交换是硬盘驱动器上的⼀个区域,它被指定为操作系统可以临时存储⽆法再保存在RAM中的数据的位置。基本上,这使您能够增加服务器在其⼯作“内存”中保留的信息量,但有⼀些注意事项。硬盘驱动器上的交换空间将主要⽤于RAM中不再有⾜够空间来保存正在使⽤的应⽤程序数据。
写⼊磁盘的信息将⽐RAM中保存的信息慢得多,但操作系统更愿意在内存中运⾏应⽤程序数据,并使⽤交换旧数据。总的来说,将交换空间作为系统RAM耗尽时的后备空间,可以很好地防范具有⾮SSD存储的系统上的内存不⾜异常。步骤1 - 检查系统的交换信息
在开始之前,我们可以检查系统是否已经有⼀些可⽤的交换空间。可以有多个交换⽂件或交换分区,但通常⼀个就⾜够了。我们可以通过键⼊以下内容来查看系统是否已配置任
sudo swapon --show
如果您没有收到任何输出,这意味着您的系统当前没有可⽤的交换空间。您可以使⽤该free实⽤程序验证没有活动交换:
free -h
输出
total used free shared buff/cache available
Mem: 985M 84M 222M 680K 678M 721MSwap: 0B 0B 0B
正如您在输出的Swap⾏中看到的那样,系统上没有活动交换。第2步 - 检查硬盘驱动器分区上的可⽤空间
在我们创建交换⽂件之前,我们将检查当前的磁盘使⽤情况,以确保我们有⾜够的空间。通过输⼊:
df -h
输出
Filesystem Size Used Avail Use% Mounted onudev 481M 0 481M 0% /devtmpfs 99M 656K 98M 1% /run/dev/vda1 25G 1.4G 23G 6% /
tmpfs 493M 0 493M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup/dev/vda15 105M 3.4M 102M 4% /boot/efitmpfs 99M 0 99M 0% /run/user/1000
在这种情况下/,Mounted on列中的设备是我们的磁盘。在这个例⼦中我们有⾜够的空间(仅使⽤1.4G)。您的使⽤可能会有
所不同。
虽然对于交换空间的适当⼤⼩有很多意见,但这实际上取决于您的个⼈偏好和您的应⽤程序要求。通常,等于或加倍系统RAM的量是⼀个很好的起点。另⼀个好的经验法则是,如果您只是将其⽤作RAM后备,那么任何超过4G的交换都可能是不必要的。
第3步 - 创建交换⽂件
现在我们知道了可⽤的硬盘空间,我们可以在⽂件系统上创建⼀个交换⽂件。我们将swapfile在根(/)⽬录中分配我们想要调⽤的交换⼤⼩的⽂件。
创建交换⽂件的最佳⽅法是使⽤该fallocate程序。此命令⽴即创建指定⼤⼩的⽂件。
由于我们⽰例中的服务器具有1G的RAM,因此我们将在本指南中创建1G⽂件。调整此项以满⾜您⾃⼰的服务器的需求:
sudo fallocate -l 1G /swapfile
我们可以通过输⼊以下内容来验证是否保留了正确的空间量:
ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
我们的⽂件创建时留出了正确的空间。第4步 - 启⽤交换⽂件
现在我们有⼀个正确⼤⼩的⽂件,我们需要实际将其转换为交换空间。
⾸先,我们需要锁定⽂件的权限,以便只有具有root权限的⽤户才能读取内容。这可以防⽌普通⽤户访问该⽂件,这会产⽣严重的安全隐患。
通过键⼊以下内容使该⽂件只能由root访问:
sudo chmod 600 /swapfile
键⼊以下命令验证权限更改:
ls -lh /swapfile
输出
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile如您所见,只有root⽤户启⽤了读写标志。
我们现在可以通过输⼊以下内容将⽂件标记为交换空间
sudo mkswap /swapfile
输出t
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)no label, UUID=6e965805-2ab9-450f-aed6-577e740dbf标记⽂件后,我们可以启⽤交换⽂件,允许我们的系统开始使⽤它:
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: 985M 84M 220M 680K 680M 722MSwap: 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
输出
对于桌⾯,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。此设置配置系统将选择多少缓存 inode 和 dentry信息⽽不是其他数据。
基本上,这是关于⽂件系统的访问数据。这通常是⾮常昂贵的查询和⾮常频繁的请求,所以这是您的系统缓存的⼀个很好的事
情。您可以通过 proc 再次查询⽂件系统来查看当前值:
cat /proc/sys/vm/vfs_cache_pressure
输出
由于它当前已配置,我们的系统会过快地从缓存中删除 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
完成后保存并关闭⽂件。结论
按照本指南中的步骤将为您提供⼀些 swap 空间,否则会导致内存不⾜异常。交换空间在避免⼀些常见问题⽅⾯⾮常有⽤。如果遇到OOM(内存不⾜)错误,或者如果发现系统⽆法使⽤所需的应⽤程序,最佳解决⽅案是优化应⽤程序配置或升级服务器。总结
以上所述是⼩编给⼤家介绍的在Ubuntu 18.04上添加交换空间的⽅法,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!如果你觉得本⽂对你有帮助,欢迎转载,烦请注明出处,谢谢!