如何在 Ubuntu 16.04 上启用或添加交换空间
在这篇文章中,我们将学习如何在 Ubuntu 16.04 上启用或添加交换分区。实际上,交换空间可以通过防止应用程序出现内存不足错误来提高服务器的响应速度。默认情况下,Ubuntu 不会启用交换空间。我们将学习如何在 Ubuntu 16.04 服务器上添加或启用交换文件。
交换空间是一个文件或位置,用于处理RAM不需要立即使用的临时数据,它可以增加服务器处理工作流程信息的能力,并在RAM不足时为应用程序提供存储空间。
检查交换信息
在开始之前,我们将首先检查服务器或系统上可用的交换空间。
我们可以使用以下命令查看系统是否已启用交换分区。
$ free -h total used free shared buffers cached Mem: 2.0G 1.9G 80M 11M 156M 1.0G -/+ buffers/cache: 738M 1.2G Swap: 0B 0B 0B
我们也可以运行以下命令,但是如果交换分区不存在,我们将看不到任何信息。
$ sudo swapon -s Filename Type Size Used Priority
从上面的命令可以看出,此服务器未启用或配置交换空间。我们将首先使用以下命令检查可用的空闲磁盘空间:
$ df –h Filesystem Size Used Avail Use% Mounted on udev 996M 4.0K 996M 1% /dev tmpfs 201M 396K 200M 1% /run /dev/xvda1 7.8G 5.8G 1.7G 79% / none 4.0K 0 4.0K 0% /sys/fs/cgroup none 5.0M 0 5.0M 0% /run/lock none 1001M 0 1001M 0% /run/shm none 100M 0 100M 0% /run/user
我们可以在 `/dev/xvda1` 上看到一些空间,或者我们可以连接新的磁盘驱动器来用作交换分区。在本例中,我们将使用 `/dev/xvda1` 作为交换分区。
创建交换文件
在我们知道磁盘空间可用性后,我们就可以在文件系统上创建交换文件了。要创建交换文件,我们可以使用 `fallocate` 包或实用程序,它可以创建预分配大小的文件。由于服务器上的空间有限,我们将创建一个大小为 512 MB 的交换文件,以下是创建交换文件的命令:
$ sudo fallocate -l 512M /swapfile
要检查交换文件,我们将使用以下命令:
$ ls -lh /swapfile -rw-r--r-- 1 root root 512M Sep 6 14:22 /swapfile
启用交换文件
在启用交换之前,我们需要修改文件权限,以便 root 以外的用户可以读取/写入该文件,以下是更改文件权限的命令:
$ sudo chmod 600 /swapfile
更改权限后,我们将检查该文件,并执行以下命令来检查交换文件的权限:
$ ls -lh /swapfile -rw------- 1 root root 512M Sep 6 14:22 /swapfile
我们将使用以下命令将此文件设置为交换空间:
$ sudo mkswap /swapfile Setting up swapspace version 1, size = 524284 KiB no label, UUID=d02e2bbb-5fcc-4c7b-9f85-4ae75c9c55f9
现在,我们将使用以下命令启用交换:
$ sudo swapon –s Filename Type Size Used Priority /swapfile file 524284 0 -1
我们也可以使用 `free -h` 命令来查看交换分区。
$ free –h total used free shared buffers cached Mem: 2.0G 1.8G 110M 11M 189M 940M -/+ buffers/cache: 759M 1.2G Swap: 511M 0B 511M
使交换分区/文件永久生效
按照上述步骤,我们已经创建了交换分区,并且能够使用它作为临时内存。但是,一旦机器重新启动,交换设置就会丢失。为了永久使用交换文件,我们将使交换文件永久生效。
我们将编辑 `/etc/fstab` 文件,并添加信息以在重新启动机器后挂载交换文件。
$ sudo vi /etc/fstab
将以下行添加到现有文件中:
/swapfile none swap sw 0 0
为了更好地使用交换内存,我们可以进行一些调整。
缓存压力设置
我们可以使用以下命令查看当前的缓存压力设置:
$ cat /proc/sys/vm/vfs_cache_pressure 100
当前设置将更快地清除缓存信息,我们将使用以下命令将这些设置设置为 60:
$ sudo sysctl vm.vfs_cache_pressure=60 vm.vfs_cache_pressure = 60
由于此设置是临时的,系统重新启动后所有设置都将丢失,因此要使其永久生效,请编辑 `/etc/sysctl.conf` 文件并添加以下行 `vm.vfs_cache_pressure=60`。
$ sudo vi /etc/sysctl.conf # Accept ICMP redirects only for gateways listed in our default # gateway list (enabled by default) # net.ipv4.conf.all.secure_redirects = 1 # # Do not send ICMP redirects (we are not a router) #net.ipv4.conf.all.send_redirects = 0 # # Do not accept IP source route packets (we are not a router) #net.ipv4.conf.all.accept_source_route = 0 #net.ipv6.conf.all.accept_source_route = 0 # # Log Martian Packets #net.ipv4.conf.all.log_martians = 1 # vm.vfs_cache_pressure=60
`swappiness` 设置
`swappiness` 是一个配置设置,它定义了交换数据交换到交换空间的频率。`swappiness` 的值是 0 到 100 的百分比,接近零的值表示除非需要移动,否则不会交换数据;接近 100 的值将更频繁地将数据放入交换空间,以释放更多 RAM。
我们可以使用以下命令查看当前设置:
$ cat /proc/sys/vm/swappiness 60
如果这是桌面系统,我们可以使用此 `swappiness` 设置,但我们正在配置服务器,因此 `swappiness` 应接近 10-20。
这里我们将 `swappiness` 配置为 20,以下是将 `swappiness` 设置为 20 的命令:
$ sudo sysctl vm.swappiness=20 vm.swappiness = 20
此设置是临时的,如果需要永久添加此 `swappiness` 设置,则需要编辑 `/etc/sysctl.conf` 文件,并将以下行添加到文件末尾:
$ sudo vi /etc/sysctl.conf # Accept ICMP redirects only for gateways listed in our default # gateway list (enabled by default) # net.ipv4.conf.all.secure_redirects = 1 # # Do not send ICMP redirects (we are not a router) #net.ipv4.conf.all.send_redirects = 0 # # Do not accept IP source route packets (we are not a router) #net.ipv4.conf.all.accept_source_route = 0 #net.ipv6.conf.all.accept_source_route = 0 # # Log Martian Packets #net.ipv4.conf.all.log_martians = 1 # vm.vfs_cache_pressure=50 vm.swappiness=10
在上面的文章中,通过设置和配置,我们可以解决服务器的内存不足问题。我们可以创建一个交换分区,并调整交换设置以更有效地使用交换分区。