Сохранять память для gui и основных подпрограмм ОС [duplicate]

Я использую свой компьютер для научного программирования. У этого есть здоровое 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
задан 7 February 2017 в 17:46

4 ответа

Встроенная оболочка ulimit позволяет вам ограничить ресурсы.

Демонстрация устанавливает ограничение на память в 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
ответ дан 18 July 2018 в 10:47

Встроенная оболочка ulimit позволяет вам ограничить ресурсы.

Демонстрация устанавливает ограничение на память в 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
ответ дан 24 July 2018 в 19:38

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

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

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

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

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

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

12
ответ дан 18 July 2018 в 10:47

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

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

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

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

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

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

12
ответ дан 24 July 2018 в 19:38
  • 1
    Нет ли удобного интерфейса для ulimit и cgroups? В Windows, когда ОС приближается к исчерпанию ОЗУ, всплывающее предупреждение всегда позволяло мне избежать зависания системы. В Ubuntu я должен постоянно следить за использованием памяти? – Dan Dascalescu 30 December 2012 в 12:19
  • 2
    Неа. Также ваша ОС также не должна замерзать, это отдельная проблема. Окна всплывают - это всего лишь бандада для начала. Если вы используете тонны памяти, возможно, вам стоит исследовать, почему? Например, современные браузеры с их sanboxing могут легко потреблять 70-150M PER TAB. Отключение или настройка его может освободить значительную память, используемую на регулярной основе конечным пользователем. Планировщики должны поменять местами редко используемые программы, чтобы сэкономить место, но если они просыпаются больше, чем нужно, тогда вам нужно их исправить или если ваша основная задача - интенсивная память (сеть), тогда требуется больше бара. – ppetraki 31 December 2012 в 21:55
  • 3
    Я знаю, что потребляет память - Chrome. Но ОС должна защищать свою устойчивость от приложений, которые все равно работают. – Dan Dascalescu 3 January 2013 в 17:30
  • 4
    Я понимаю, откуда вы пришли, как пользователь. То, что вы просите, однако, означает превратить общую вычислительную платформу в устройство. В качестве наименее сложного метода (с ошибкой), который должен выполнить инженер операционной системы для обеспечения этих гарантий, следует принимать решительные решения относительно того, как работает весь компьютер. Это обычно происходит за счет гибкости конечного пользователя. Вы видите примеры этого в планшетных компьютерах. Однако на рабочих столах сохраняется гибкость. – ppetraki 4 June 2013 в 19:14

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

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