我有一台Debian(Buster)笔记本电脑,具有8 GB RAM和16GB交换空间。我正在执行一项很长时间的任务。这意味着我的笔记本电脑在过去的六天内一直处于开机状态。
在执行此操作时,我需要定期将笔记本电脑用作笔记本电脑。这应该不成问题;长期运行的任务是受I / O约束,可以处理USB硬盘上的内容,并且不会占用太多RAM(<200 MB)或CPU(<4%)。
问题是几个小时后我回到笔记本电脑时,它会非常缓慢,可能需要30分钟才能恢复正常。这非常糟糕,崩溃监视器将其各自的应用程序标记为已冻结(尤其是浏览器窗口),并且开始错误地崩溃。
在系统监视器上查看,已使用的2.5 GB内存中约有一半转移到了swap中。我已通过删除交换空间(swapoff /dev/sda8
)确认了这是问题所在。如果我没有交换空间就可以使用它,即使在24小时之后,它也几乎可以立即恢复运行。通过交换,实际上仅剩下前六个小时的前五分钟就变成了一块砖。我已经确认即使我不在时内存使用量也不会超过3 GB。
我曾尝试降低swappiness(另见:维基百科)对值10
和0
,但问题仍然存在。似乎经过一天的不活动之后,内核认为不再需要整个GUI,并将其从RAM擦除(将其交换到磁盘)。长期运行的任务是读取庞大的文件树并读取每个文件。因此可能是内核被混淆了以为缓存会有所帮助。但是,仅扫描一次具有约10亿个文件名的2 TB USB HD,额外的GB RAM就不会对性能产生很大的帮助。这是一台便宜的笔记本电脑,硬盘驱动器呆滞。它根本无法足够快地将数据加载回RAM。
如何告诉Linux仅在紧急情况下使用交换空间?我不想没有交换就跑。如果发生意外情况,并且操作系统突然需要额外的GB,那么我不希望任务被杀死,而宁愿开始使用swap。但是目前,如果我启用交换功能,则仅在需要时才可以使用笔记本电脑。
“紧急情况”的确切定义可能是一个有争议的问题。但是要澄清一下我的意思:紧急情况是系统处于交换或终止进程的状态而没有其他选择的地方。
什么是紧急情况?- 您真的要问吗?...希望您永远不会在燃烧的建筑物中发现自己!
对于这个问题,我无法定义所有可能构成紧急情况的东西。但是例如,紧急情况可能是当内核被迫压入内存以至于它开始使用OOM Killer终止进程时。当内核认为使用交换可以提高性能时,就不会出现紧急情况。
最终编辑: 我已经接受了一个答案,该答案恰好满足了我在操作系统级别上的要求。未来的读者还应该注意提供应用程序级解决方案的答案。