Я использую свой компьютер для научного программирования. Он имеет исправную 8GB
оперативную память и 12GB
пространство подкачки. Часто, когда мои проблемы увеличиваются, я превышаю всю доступную оперативную память. Вместо сбоя (что было бы предпочтительнее) кажется, что Ubuntu начинает загружать все в swap, включая Unity и любые открытые терминалы. Если я вовремя не поймаю запущенную программу, я ничего не могу поделать, кроме как ждать - для перехода в командную строку требуется 4-5 минут, например. Ctrl-Alt-F2
где я могу убить оскорбительный процесс.
Так как моя собственная глупость выходит за рамки этого форума, как я могу предотвратить сбой Ubuntu из-за сбоя, когда я использую всю доступную память от одной программы-нарушителя?
Домашний эксперимент *!
Откройте терминал, запустите python
и, если вы numpy
установили, попробуйте это:
>>> import numpy
>>> [numpy.zeros((10**4, 10**4)) for _ in xrange(50)]
* Предупреждение: может иметь побочные эффекты, контролировать процесс через iotop
или top
убить его вовремя. Если нет, увидимся после перезагрузки.
источник
Cgroups должны позволить вам ограничить использование памяти для каждого процесса.
https://en.wikipedia.org/wiki/Cgroups
http://www.mjmwired.net/kernel/Documentation/cgroups/memory.txt
Научные вычисления, как известно, занимают много памяти, поскольку помещая ваше приложение в изолированную группу в песочнице, остальные процессы не должны становиться жертвами, поскольку нагрузка на память будет уменьшена.
В качестве альтернативы виртуальная машина может использоваться как своего рода жесткое ограничение, поскольку приложение может использовать только память, делегированную виртуальной машине, конечно, за счет производительности. Однако виртуальную машину гораздо проще настроить для непосвященного по сравнению с настройкой и поддержкой cgroup.
Решения решения :) Удачи!
источник