自动管理交换/内存

自动管理交换/内存

当填满所有内存并交换时,我最近几年的经验是:

  • Windows 和 macOS 会说“哦,我们帮你解决这个问题”,然后大概会增加交换大小。例如,打开 30 个 YouTube 标签会使速度变慢一段时间,但如果我想中止该过程,我通常仍然可以使用光标,之后系统的其余部分(不一定是有问题的应用程序)几乎和往常一样灵敏。

  • Ubuntu (21.04) 提示“抱歉,您在接下来的十到三十分钟内无法与计算机交互”。在相同的硬件和相同的浏览器上,我可以打开 30 个 YouTube 标签,然后看到整个系统锁定。所有内存和交换都用完了,光标不仅变慢,而且锁定在原地。我无法与系统的其余部分进行有意义的交互。

不同之处在于 Ubuntu 永远不会解决这种情况,而是保持其交换大小不变,因此每五秒钟就会锁定一次,直到永远。直到发生灾难性故障,Firefox 消失得无影无踪——这在其他操作系统中几乎从未发生过。最关键的方面是,我无法与系统的其余部分进行交互。

我不知道,但我的印象是,如果根据需求增加交换大小,这将不是问题。这是如何实现的?是否有更好的内存管理方法?


测试更新

在(不是那么快)按照评论中建议的快速测试(将交换文件的大小增加了一倍)之后,我可以得出结论,这会带来天壤之别。在相同的负载下,系统始终保持响应。我只能得出这样的结论:自适应交换大小可以缓解所述问题。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          3.7Gi       3.1Gi       129Mi       374Mi       566Mi       105Mi
Swap:         4.0Gi       3.0Gi       988Mi

$ sysctl vm.swappiness
vm.swappiness = 60

$ swapon -s
Filename                Type        Size    Used    Priority
/swapfile_4G.img                        file        4194300 3180664 20

关于硬件的说明

Ubuntu 的卖点之一是获得持续支持并延长旧硬件(包括总内存低于平均水平的机器)的使用寿命。内存并不少,这一点从其他操作系统也能应付自如,只是低于平均水平这一事实可以看出。许多这样的机器是不可升级的。

4 GB RAM 在大多数情况下都可以满足需求。在 Ubuntu、Windows 和 macOS 中。然而,只有在您用完所有分配的交换空间时,Windows 和 macOS 中才似乎可以正常工作。

简而言之,让 Ubuntu 运行的解决方案体面地变成“购买新硬件”,运行它的全部意义对于所有这些机器来说都变得毫无意义。升级硬件超出了这个问题的范围。

Ubuntu 标准版的要求是 4 GB 内存。

答案1

Linux 内核在交换支持方面不太可靠。从许多开发人员的角度来看,交换是二等公民。我的意思是,用于弹出和获取页面的算法相当简单,当有大量常用页面时可能会崩溃。

一个不错的解决方案可能是使用 zswap。它的作用是将一块内存设置为压缩内存,页面被弹出到该内存中。为此,编辑内核启动参数以添加zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 zswap.zpool=z3fold。在 Ubuntu 系统上执行此操作的最简单方法是将其添加到文件中/etc/default/grub,作为密钥的一部分GRUB_CMDLINE_LINUX_DEFAULT。这将有效增加可存储在 RAM 中的数据量,减少磁盘 IO 并防止锁定。

最后,您询问是否要动态创建更多交换空间。Linux 完全能够随意添加和删除交换文件,这意味着脚本可以检查交换可用性,然后在需要时添加交换文件。但是,如果您经常使用完整的交换空间,那么这样做就没有什么意义了。

要增加交换空间(无需重新分区磁盘),可以使用交换文件。为此,运行sudo dd if=/dev/zero of=/swapfile count=1M bs=1024 status=progress,它将 100 万个 1024 字节块(即 1 GB)复制到一个文件中。然后,运行sudo chmod 0600 /swapfilesudo mkswap /swapfile准备文件以用作交换。将其添加到 /etc/fstab 以使其始终可用,方法是将以下行附加到该文件:/swapfile swap swap defaults 0 0。要完成该过程,请调用sudo swapon -a,这将激活交换文件。

来源:我自己使用 swapfiles 和 zswap,并参考了我的bash_history和 Arch wiki 的命令。

答案2

正如@Terrance 在评论中提到的那样交换空间是解决这个问题的方法。

apt install swapspace

现在你只需要一些免费存储空间来控制你的系统。经过测试和作品

相关内容