Ограничивающие решения для памяти для жадных приложений, которые могут разрушить ОС?

Я использую свой компьютер для научного программирования. Это имеет здоровое 8GB из RAM и 12GB из области подкачки. Часто, поскольку мои проблемы стали больше, я превышаю всю доступную RAM. Вместо того, чтобы отказывать (который был бы предпочтен), кажется, что Ubuntu начинает загружать все в подкачку, включая Единицу и любые открытые терминалы. Если я не ловлю безудержную программу вовремя, нет ничего, что я могу сделать, но ожидать - требуется 4-5 минут для переключения на командную строку, например. Ctrl-Alt-F2 где я могу уничтожить незаконный процесс.

Так как моя собственная глупость вне объема этого форума, как я могу препятствовать тому, чтобы Ubuntu отказала через перегрузку, когда я израсходовал всю доступную память из единственной незаконной программы?

Эксперимент приема*!

Откройте терминал, запуск python и если Вы имеете numpy установленная попытка это:

>>> import numpy
>>> [numpy.zeros((10**4, 10**4)) for _ in xrange(50)]

* Предупреждение: может иметь отрицательные эффекты, контролировать процесс через iotop или top уничтожить его вовремя. В противном случае я буду видеть Вас после Вашей перезагрузки.

34
задан 7 February 2017 в 16:46

2 ответа

Встроенная оболочка ulimit позволяет вам ограничить ресурсы. В вашем случае, чтобы ограничить использование памяти в оболочке (и ее дочерних компонентах), используйте ulimit -v .

Демонстрационная установка предела памяти в 100 МБ (100000 КБ):

$ ulimit -v
unlimited
$ python -c '[ "x" * 100000000 ]'
$ ulimit -v 100000
$ python -c '[ "x" * 100000000 ]'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
MemoryError

Наблюдается при использовании ps uww -C script-name-here , что python требует не менее 29 МБ памяти (столбец VSZ). Предел RSS растет, поскольку вашему скрипту Python требуется больше памяти, поэтому адаптируйте этот столбец.

23
ответ дан 7 February 2017 в 16:46

Cgroups должны позволять вам ограничивать использование памяти для каждого процесса.

https://en.wikipedia.org/wiki/Cgroups

http: //www.mjmwired .net / kernel / Documentation / cgroups / memory.txt

Общеизвестно, что научные вычисления потребляют много памяти из-за песочницы ваше приложение в cgroup, остальные процессы не должны становиться жертв, поскольку давление на память будет уменьшено.

В качестве альтернативы виртуальная машина может использоваться как своего рода жесткое ограничение, как приложение может использовать только память, делегированную виртуальной машине, за счет производительности конечно. Однако виртуальную машину гораздо проще настроить. для непосвященных по сравнению с настройкой и поддержкой контрольной группы.

Решения, решения :) Удачи!

12
ответ дан 7 February 2017 в 16:46

Другие вопросы по тегам:

Похожие вопросы: