在本文中,我们将学习如何增加交换空间,这将解决应用程序中的内存错误。这将介绍如何将交换文件添加到Ubuntu Linux。
无论如何,建议使用旋转的硬盘驱动器进行交换,因为随着时间的推移SSD可能会导致硬件降级的问题。由于这个原因,请勿在提供SSD存储的云上启用交换。
交换是操作系统可以存储临时数据的地方,因为它不再保存在RAM中。基本上,这将提高服务器在其工作内存期间可以保留的数据量的能力。硬盘驱动器上的交换空间将主要在RAM中有足够的空间来保存数据时使用。
写入磁盘的数据将比RAM慢,但是OS宁愿将正在运行的应用程序和数据保留在内存中,而将旧数据保留在交换中。
我们将首先检查已经具有交换空间的系统。我们可以有多个交换文件或分区。
请注意,通过使用以下命令,我们可以在系统中看到可用的交换–
# sudo swapon --show [sudo] password for ubuntu: NAME TYPE SIZE USED PRIO /dev/dm-1 partition 1020M 0B -1
或者我们可以使用free -h命令显示交换空间。
$ free -h total used free shared buffers cached Mem: 975M 254M 720M 4.8M 12M 133M -/+ buffers/cache: 109M 866M Swap: 1.0G 0B 1.0G
我们可以在计算机的输出中看到“交换”行。在这台机器上,我们分配了1.0 G交换空间。
在Linux上分配交换空间的最常见方法是使用为交换分配的单独分区。我们无法更改不可能的分区方案,但我们可以轻松创建驻留在现有分区上的交换文件。
在执行此操作之前,我们将使用以下命令检查当前磁盘空间。
$ df -h Filesystem Size Used Avail Use% Mounted on udev 473M 0 473M 0% /dev tmpfs 98M 4.9M 93M 5% /run /dev/dm-0 19G 3.1G 15G 18% / tmpfs 488M 0 488M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 488M 0 488M 0% /sys/fs/cgroup /dev/sda1 236M 51M 173M 23% /boot tmpfs 98M 0 98M 0% /run/user/1000
/ dev下的设备是硬盘驱动器,这里我们有15 G的可用空间。
通常,为了良好启动,建议使用等于或大于计算机上RAM数量的内存。
我们知道可用的硬盘空间,因此可以在文件系统中创建交换文件。另外,请注意,我们称为“ swapfile”的交换大小文件位于我们的根分区/目录中。
创建交换文件的最佳方法是使用名为“ fallocate”的文件,该命令将立即创建一个预分配大小的文件。
由于我们为计算机分配了1 GB RAM,因此我们将创建更多2 GB文件,以满足Linux的最低要求。
$ sudo fallocate -l 2G /swapfile
我们可以使用以下命令进行验证。
$ ls -lh /swapfile -rw-r--r-- 1 root root 2.0G May 16 12:52 /swapfile
我们已经创建了我们需求的交换文件,但是需要在该交换空间中将其打开。在打开交换文件之前,我们需要将文件的权限锁定为只能读取文件内容的root用户特权,这将阻止普通用户访问该文件。
我们可以使用下面的命令来做到这一点
$ sudo chmod 600 /swapfile
为了验证权限,我们可以使用以下命令查看
$ ls -lh /swapfile -rw------- 1 root root 2.0G May 16 12:52 /swapfile
我们可以使用以下命令打开“交换文件”以用作交换空间
$ sudo mkswap /swapfile Setting up swapspace version 1, size = 2 GiB (2147479552 bytes) no label, UUID=049218ad-50b4-4c78-98e4-7a1ea21ca77e
我们必须通过分配的空间量来验证交换是否可用。为此,我们可以使用以下命令–
$ sudo swapon --show NAME TYPE SIZE USED PRIO /dev/dm-1 partition 3068M 0B -1
或使用以下命令–
$ free -h total used free shared buffers cached Mem: 975M 255M 720M 4.8M 12M 133M -/+ buffers/cache: 108M 867M Swap: 3.0G 0B 3.0G
由于我们为当前会话更改了交换文件,因此我们还需要重新启动不会将交换设置保留为该永久设置的服务器。同样,我们可以自动将此交换文件设置添加到“ / etc / fstab”文件中。
$ sudo vi /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> /dev/mapper/server--vg-root / ext4 errors=remount-ro 0 1 # /boot was on /dev/sda1 during installation UUID=40f8b7fe-3195-414a-a0e4-a4443cceb78c /boot ext2 defaults 0 2 /dev/mapper/server--vg-swap_1 none swap sw 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0 /swapfile none swap sw 0 0
我们可以使用上述步骤通过交换文件来增加交换空间,在该文件中我们可以解决与内存异常有关的问题。如果我们在任何Linux服务器上都用光了内存,那么以上内容将特别有用。