Вопрос: Ограничение памяти решения для жадных приложений, которые могут привести к сбою ОС?


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

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

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

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

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

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


28
2018-04-10 16:11


Источник




Ответы:


Встроенная оболочка 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 требуется больше памяти, чтобы адаптировать этот столбец.


17
2018-04-10 16:39



Жаль, что мы не знаем, как выглядит приложение. Улимит, как показано, воздействует на все процессы, являющиеся детьми этой оболочки. Мы даже не знаем, работает ли он как демон, или если у него много детей, что еще больше усложнит ситуацию. Видеть coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/... - ppetraki
Здесь нет удобного внешнего интерфейса для ulimit и контрольные группы? В Windows, когда ОС приближается к исчерпанию ОЗУ, всплывающее предупреждение всегда позволяло мне избежать зависания системы. В Ubuntu я должен постоянно следить за использованием памяти? - Dan Dascalescu
@DanDascalescu Если у вас настроен файл подкачки, вы будете испытывать большие задержки, но все же сможете работать. Как только вы заметите, что начинается обмен, вы можете проверить системный монитор на использование ОЗУ. Если в вашей системе действительно закончилась нехватка памяти, вызывается убийца из памяти (OOM), который убивает процесс с самым высоким значением «плохой» (обычно это процесс, который потребляет большую часть памяти). - Lekensteyn


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

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

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

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

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

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


12
2018-04-10 16:20



Нет ли удобного интерфейса для ulimit и cgroups? В Windows, когда ОС приближается к исчерпанию ОЗУ, всплывающее предупреждение всегда позволяло мне избежать зависания системы. В Ubuntu я должен постоянно следить за использованием памяти? - Dan Dascalescu
Неа. Также ваша ОС также не должна замерзать, это отдельная проблема. Окна всплывают - это всего лишь бандада для начала. Если вы используете тонны памяти, возможно, вам стоит исследовать, почему? Например, современные браузеры с их sanboxing могут легко потреблять 70-150M PER TAB. Отключение или настройка его может освободить значительную память, используемую на регулярной основе конечным пользователем. Планировщики должны поменять местами редко используемые программы, чтобы сэкономить место, но если они просыпаются больше, чем нужно, тогда вам нужно их исправить или если ваша основная задача - интенсивная память (сеть), тогда требуется больше бара. - ppetraki
Я знаю, что потребляет память - Chrome. Но ОС должна защищать свою устойчивость от приложений, которые все равно работают. - Dan Dascalescu
Я понимаю, откуда вы пришли, как пользователь. То, что вы просите, однако, означает превратить общую вычислительную платформу в устройство. В качестве наименее сложного метода (с ошибкой), который должен выполнить инженер операционной системы для обеспечения этих гарантий, следует принимать решительные решения относительно того, как работает весь компьютер. Это обычно происходит за счет гибкости конечного пользователя. Вы видите примеры этого в планшетных компьютерах. Однако на рабочих столах сохраняется гибкость. - ppetraki