Отклонить malloc для голодного приложения

Можно ли отклонить malloc вместо процесса убийства, выбранного убийцей OOM? Я думаю, что из памяти можно, по крайней мере, занести в журнал процесс, который лучше, чем быть убитым. Кроме того, часть проблемы заключается в том, что система не реагирует на долгое время (пару минут), прежде чем убить процесс наступления.

Являются ли контрольные группы лучшими инструментами для гарантии памяти других процессов?

Вы можете установить лимиты перед началом процесса. Например, установите предел виртуальной (мягкой) памяти для текущей оболочки на 1G

 ulimit -S 1048576 

Вы также можете установить такие ограничения в системе, например, у меня есть следующее:

  • /etc/security/limits.conf:

     * soft as 25165824 * hard as 25165824 
  • /etc/systemd/system.conf:

     DefaultLimitAS=25769803776 

Чтобы ограничить все процессы до 24G на моих 32G-системах. Хотя два процесса вместе могут по-прежнему вызывать такую ​​ситуацию с ООМ, на практике это никогда не происходило.

Что касается «невосприимчивости в течение долгого времени до убийства наступательного процесса»:

  • Не используйте раздел подкачки, тогда все будет быстро убито.

Обратите внимание: на самом деле malloc (виртуальная память) не является реальной проблемой. OOM происходит только тогда, когда процесс начинает использовать эту память malloc'. К сожалению, в Linux вы не можете ограничить резидентную память. См. "Overcommit памяти":