当我运行一段使用大量内存的代码时,如下所示:
a = "1"
while True:a+=a
在 Windows 10 中,它使我的memory error
计算机保持安全,但在 Linux 中运行此代码会导致冻结并耗尽内存。为什么它不给我memory error
?
答案1
Linux 内核 OOM 处理能力相当差,Linux 内核开发人员已经明确表示这个问题应该在用户空间中解决:https://lkml.org/lkml/2019/8/4/15
至于用户空间,您可以自由使用:
cgroups
limits.conf
earlyoom
,nohang
以及类似的应用程序:https://github.com/hakavlad/nohang
像 Fedora 这样的发行版现在earlyoom
默认包含在内。
2022 年 10 月更新:
如果您使用的是足够新的发行版,现在systemd-oomd
必须为您启用。如果您没有安装它,您可以earlyoom
手动安装(必须在大多数发行版的存储库中可用或可以编译)。