多年来,我在没有交换的情况下设置我的 Linux 机器,因为它们有足够的内存来完成我需要的事情,我宁愿一个进程在使用太多内存时被杀死,而不是变得越来越大并悄悄地减慢一切。
但是我发现我需要交换才能在笔记本电脑上使用休眠功能,因此我创建了一个交换分区,并且休眠功能一直工作正常。
最近我发现机器进入待机状态而不是休眠状态,经过调查发现交换分区中没有足够的空间来进行休眠。这是因为我认为保留用于休眠的交换分区实际上被用作普通交换空间。
有什么方法可以告诉 Linux 仅将给定的交换分区用于休眠,而不是在正常操作期间使用它进行交换?
编辑:根据下面的问题,机器有 8GB 内存,交换分区也是 8GB,因为我只想将其用于休眠使用而不是实际交换使用,因此任何大于机器内存大小的都会被浪费。根本问题是,由于 8GB 交换分区被用作额外内存,因此机器现在最多可以分配 16GB 内存(8GB 物理 + 8GB 交换)。它最近使用了 10GB,当然无法休眠,因为 8GB 交换分区无法容纳 10GB。
答案1
有什么方法可以告诉 Linux 仅将给定的交换分区用于休眠,而不是在正常操作期间使用它进行交换?
从 中删除或注释相应的行/etc/fstab
。我的系统上的示例
$ grep swap /etc/fstab
/dev/mapper/NEO--L196--vg-swap_1 none swap sw 0 0
已删除,因为pm-hibernate
需要“激活”交换分区才能工作
保持交换处于激活状态(因此将其单独保留在 中/etc/fstab
),但明确要求内核忽略它。
这是通过使用 sysctl 参数vm.swappiness
为 0 来完成的(有效值为 0-100;较高的值将使内核交换更加积极;默认值为 60)。
要确保此设置在重新启动后保持不变,请编辑/etc/sysctl.conf
并添加一行vm.swappiness=0
.