Я использую свой компьютер для научного программирования. Это имеет здоровое 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
уничтожить его вовремя. В противном случае я буду видеть Вас после Вашей перезагрузки.
Встроенная оболочка 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 требуется больше памяти, поэтому адаптируйте этот столбец.
Cgroups должны позволять вам ограничивать использование памяти для каждого процесса.
https://en.wikipedia.org/wiki/Cgroups
http: //www.mjmwired .net / kernel / Documentation / cgroups / memory.txt
Общеизвестно, что научные вычисления потребляют много памяти из-за песочницы ваше приложение в cgroup, остальные процессы не должны становиться жертв, поскольку давление на память будет уменьшено.
В качестве альтернативы виртуальная машина может использоваться как своего рода жесткое ограничение, как приложение может использовать только память, делегированную виртуальной машине, за счет производительности конечно. Однако виртуальную машину гораздо проще настроить. для непосвященных по сравнению с настройкой и поддержкой контрольной группы.
Решения, решения :) Удачи!