拒绝内存消耗大的应用程序的 malloc

拒绝内存消耗大的应用程序的 malloc

是否可以拒绝mallocOOM 杀手选择的进程而不是杀死进程?我认为内存不足至少可以由进程记录,这比被杀死要好。此外,部分问题是系统在杀死攻击进程之前很长时间(几分钟)没有响应。

控制组是保证其他进程内存的更好工具吗?

答案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 上你无法限制常驻内存。请参阅“内存过量使用”:

相关内容