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

Я не знаю ни о какой подобной программе.

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

Лично, я не дал бы никому, кого я не знал лично sudo доступа, даже к подмножеству команд, потому что слишком легко пропустить что-то и предоставить им доступ, который Вы не ожидаете.

Доверяйте им или не доверяйте им, создавание слоев не совсем доверчивых их не помогает.

9
22.02.2012, 13:56
2 ответа

Да, VSZ является виртуальной памятью. Относительно RLIMIT_AS, где Вы находили абзац заключенным в кавычки выше? С тех пор setrlimit (2) системный вызов Linux, я не вижу, как он мог возможно контролировать malloc (3), библиотечная функция. Вместо этого это может только работать с кирпичом (2), sbrk (2), и mmap (2) - это также, что предлагает его страница справочника (проверенный Научного Linux). Однако общий объем памяти, которую требуют через эти функции, является виртуальной памятью, таким образом, RLIMIT_AS действительно ограничивает виртуальную память. (Это, снова, в соответствии с setrlimit (2) страница справочника.)

К сожалению, Вы не можете ограничить RSS в соответствии с Linux (это было бы ulimit -m). Можно попробовать ulimit -d (RLIMIT_DATA), но это проигнорирует mmap (2), обычно используемый для больших выделений. Другая возможность состояла бы в том, чтобы ограничить виртуальную память, но с такими значительными различиями между RSS и VSZ, это могло бы быть трудно.

5
27.01.2020, 20:07
  • 1
    Спасибо за Ваш ответ. Абзац от setrlimit страница справочника IEEE/The Open Group 2003 GETRLIMIT(3P) Каким образом ps может показать мне RSS, но ядро не может осуществить предел на него? –  Dragomir Ivanov 22.02.2012, 12:26
  • 2
    По словам Alan Cox, это имеет исторические причины: вычисление RSS раньше было дорогим, так осуществило, предел создаст большую нагрузку для ядра; источник: linux.derkeiler.com/Mailing-Lists/Kernel/2006-01/msg03306.html. См. также stackoverflow.com/questions/3043709 / … –  Ansgar Esztermann 22.02.2012, 13:08
  • 3
    , который я вижу. Я предполагаю, что пошел бы с ulimit -d затем. Приложение записано мной, и я не использовал mmap(). –  Dragomir Ivanov 22.02.2012, 13:16
  • 4
    Нет, Вы обычно не делаете (ни sbrk ()), но malloc () мог бы. –  Ansgar Esztermann 22.02.2012, 13:32
  • 5
    , который я вижу. Это очень неудачно. Так решение этого вопроса затем, или cgroups или опрос использования памяти с некоторым языком сценария. –  Dragomir Ivanov 22.02.2012, 17:35

Многие процессы делят часть своей памяти с другими процессами, например, libc используется почти каждым процессом, но только один раз маппируется в память, но это считается с использованием виртуальной памяти каждым процессом. Ограничение использования памяти, которое используется только определённым процессом (в основном RSS), может быть сделано с помощью cgroups. Смотрите ответы на Как ограничить общие ресурсы (память) процесса и его дочерних процессов для получения информации о том, как это сделать. Это ограничит общую память процесса и его дочерних процессов.

3
27.01.2020, 20:07

Теги

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