是否可以拒绝malloc
OOM 杀手选择的进程而不是杀死进程?我认为内存不足至少可以由进程记录,这比被杀死要好。此外,部分问题是系统在杀死攻击进程之前很长时间(几分钟)没有响应。
控制组是保证其他进程内存的更好工具吗?
答案1
您可以在开始该过程之前设置限制。例如将当前 shell 的虚拟(软)内存限制设置为 1G
ulimit -S 1048576
您还可以在系统范围内设置此类限制,例如我有这样的:
/etc/security/limits.conf:
* soft as 25165824 * hard as 25165824
/etc/systemd/system.conf:
DefaultLimitAS=25769803776
将我的 32G 系统上的所有进程限制为 24G。尽管两个进程一起仍然可能导致这种 OOM 情况,但实际上从未发生过。
关于“杀掉进攻进程之前长时间无反应”:
- 不要使用交换分区,否则东西会很快被杀死。
请注意,实际上 malloc(虚拟内存)并不是真正的问题。仅当进程开始使用该 malloc 内存时才会发生 OOM。不幸的是,在 Linux 上你无法限制常驻内存。请参阅“内存过量使用”: