Как я могу ограничить использование памяти определенного процесса в Linux?

9941
user20222

Я написал программу для класса, который мой профессор будет тестировать в различных средах с нехваткой памяти, чтобы посмотреть, как он себя ведет, когда программе не хватает памяти. Есть ли способ, которым я могу имитировать выполнение в среде с низким объемом памяти без создания виртуальной машины?

7

1 ответ на вопрос

8
basszero

Вы хотите использовать Ulimit

ulimit может использоваться для ограничения использования памяти (среди прочего)

Вот пример настройки использования памяти настолько низким, что /bin/ls(больше чем /bin/cat) больше не работает, но /bin/catвсе еще работает.

$ ls -lh /bin/ls /bin/cat -rwxr-xr-x 1 root root 25K May 24 2008 /bin/cat -rwxr-xr-x 1 root root 88K May 24 2008 /bin/ls $ date > test.txt $ ulimit -d 10000 -m 10000 -v 10000 $ /bin/ls date.txt /bin/ls: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory $ /bin/cat date.txt Thu Mar 26 11:51:16 PDT 2009 $ 

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

размер сегмента данных

-м максимальный объем памяти

-v размер виртуальной памяти

Запустите ulimit -a, чтобы увидеть все ограничения ресурсов, которые может установить ulimit.

Есть ли что-то, что делает что-то похожее на однопользовательской основе? У меня нет разрешения вносить общесистемные изменения. user20222 14 лет назад 0
@ user20222: Вы можете использовать ulimit в командной строке или в скрипте на Bash. Dennis Williamson 14 лет назад 0
Я получаю-- ulimit: максимальный объем памяти: невозможно изменить ограничение: операция не разрешена user20222 14 лет назад 0
Что именно ты попробовал? Опубликовать командную строку, которую вы использовали basszero 14 лет назад 0
"ulimit -m 1000" и "ulimit -H-1000". Я также сделал это: «ulimit -S -m 1000», который не выдавал ошибку, но не устанавливал ограничение памяти для программы. user20222 14 лет назад 0
Я разговаривал с системным администратором, и я не уверен, что случилось, но он решил проблему. user20222 14 лет назад 0
В моей системе флаг ключа ulimit выглядит как `-v` (виртуальная память). Установка `-m`, похоже, ничего не делает. eswald 14 лет назад 0
Установка -m ограничивает использование физической оперативной памяти в системах, которые ее применяют. Установка -v ограничивает использование виртуальной памяти в системах, которые ее применяют. David Schwartz 13 лет назад 0

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