Мои текущие конфиги:
> cat /proc/sys/vm/panic_on_oom
0
> cat /proc/sys/vm/oom_kill_allocating_task
0
> cat /proc/sys/vm/overcommit_memory
1
но когда я запускаю задачу, она все равно убивается.
> ./test/mem.sh
Killed
> dmesg | tail -2
[24281.788131] Memory cgroup out of memory: Kill process 10565 (bash) score 1001 or sacrifice child
[24281.788133] Killed process 10565 (bash) total-vm:12601088kB, anon-rss:5242544kB, file-rss:64kB
Обновлять
Мои задачи привыкли к научным вычислениям, которые требуют много памяти, кажется, что overcommit_memory=1
может быть лучшим выбором.
Обновление 2
На самом деле, я работаю над проектом анализа данных, который требует памяти больше, чем 16G
, но меня попросили ограничить их примерно в 5G
. Реализовать это требование путем оптимизации самой программы может быть невозможно, поскольку в проекте используется множество подкоманд, и большинство из них не содержит таких параметров, как Xms
или Xmx
в Java.
Обновление 3
Мой проект должен быть перегруженной системой. Точно так же, как говорит a3f, кажется, что мои приложения предпочитают аварийно завершать работу на xmalloc
при сбое выделения памяти.
> cat /proc/sys/vm/overcommit_memory
2
> ./test/mem.sh
./test/mem.sh: xmalloc: .././subst.c:3542: cannot allocate 1073741825 bytes (4295237632 bytes allocated)
Я не хочу сдаваться, хотя столько страшных испытаний меня утомляют. Так что, пожалуйста, укажи мне путь к свету; )