Linux交换空间详解(二)

这是Linux交换空间详解第二部分,要阅读第一部分,请点击Linux交换空间详解(一)

交换文件

交换空间的另外一个实现方法是交换文件。交换文件的大小可以随时改变,它的删除更加容易。我们可以在交换分区以外的任意一个分区创建交换文件。如果磁盘空间有限,那么交换文件是一种更加可取的实现方法。需要注意的是,Btrfs文件系统并不支持交换文件。

交换文件的创建

以root权限使用fallocate命令来创建一个文件,文件的大小可以由用户任意指定,例如:

swap file creation

我们也可以用dd工具来创建文件,如下图。不过dd的速度比fallocate要慢,而且命令语法也比fallocate的命令语法更复杂。

create swap file using dd utility

然后为文件设置正确的权限。执行命令: sudo chmod 600 /swapfile

set permission to swap file

将文件格式化成交换文件: sudo mkswap /swapfile

format it to swap

启用交换文件: sudo swapon /swapfile

activate swap file

最后,在/etc/fstab文件中为交换文件添加如下记录: /swapfile  none  swap  defaults  0  0

add an entry in fstab for swap file

删除交换文件

要删除交换文件,首先要把它关闭。命令: sudo swapoff -a 这条命令在执行的时候,会先将交换空间里的所有页面换入物理内存,以保证程序的运行不受影响。

然后将它删除。命令: sudo rm -f /swapfile

swappiness

有时候你会发现,虽然电脑内存还有非常多的剩余空间,但系统仍然在使用交换空间。这是由于swappiness的设置。swapppiness是Linux内核的一个参数,它控制Linux内核将进程从物理内存中交换出去的频繁度。swappiness的值可以在0到100之间。较低的swappiness值使Linux内核尽量避免进行交换操作,而较高的值则使内核尽量使用交换空间。swappiness的默认值是60。如果值为0,那么内核不进行交换操作,除非物理内存已经用完。如果值为100,那么内核将频繁地进行交换操作。若用户的物理内存充足,那么推荐把swappiness值设为10以提高程序的响应性。

查看当前的swappiness值: cat /proc/sys/vm/swappiness

check current swappiness value

临时更改swappiness值: sysctl vm.swappiness=10

temporarily change swappiness value

要永久地更改swappiness值,我们需要编辑一个sysctl配置文件。命令:sudo nano /etc/sysctl.d/99-sysctl.conf
在这个文件中添加记录 vm.swappiness=10

交换公式(swap formula)

交换公式可以用于计算系统在什么时候会开始使用交换空间。交换公式如下:

剩余内存 <= 总物理内存/ 100 *swappiness

假设你的电脑有4G内存,swappiness的值为60, 4G / 100 * 60 = 2457.6MB,那么当剩余内存小于或等于60%即2457.6MB时,系统将开始使用交换空间。

优先级

如果你的系统上不只有一个交换分区或交换文件,那么你应当考虑为每个交换空间设置一个优先级。例如,你有两个硬盘,一个快一个慢,那么应该为快硬盘的交换空间设置高优先级,为慢硬盘的交换空间设置低优先级。我们可以使用swapon命令的 -p 参数来设置优先级。

set priority for swap area

如果两个交换空间的优先级相同,那么它们将依次轮流地被内核使用。

为这篇文章评分
[Total: 0 Average: 0]

发表评论

电子邮件地址不会被公开。 必填项已用*标注