Почему не работает "(ulimit -d 1000; firefox) &"?

649
MaxB

Я пытаюсь ограничить использование памяти, firefoxчтобы она не блокировала всю систему проблемными веб-сайтами.

Я пытался, в bash:

(ulimit -d 1000; firefox) & 

Это должно ограничить использование памяти до 1000 КБ. Затем я открыл YouTube и заметил, topчто firefoxон использует 2,6% памяти или около 200 МБ и не вылетает. Очевидно, что предел игнорируется. Почему это так, и как я могу правильно применить это?

1
Я в замешательстве. Должен ли `-d` ограничивать кучу? Я думал, что куча считается отдельной от сегмента данных, но на странице `setrlimit (2)` говорится, что `RLIMIT_DATA` устанавливает` Максимальный размер сегмента данных процесса (инициализированные данные, неинициализированные данные и куча). ' rakslice 9 лет назад 0
@rakslice, как подсказывает ваша цитата, сегмент данных включает в себя все. В Linux я считаю, что процесс просто просит ОС изменить размер своего «пространства» (сегмента данных). Библиотека (libc) должна предоставить удобный интерфейс (malloc / heap). MaxB 9 лет назад 0
Работает ли без под-оболочки? То есть, что произойдет, если вы выполните `ulimit -d 1000; firefox`? Кроме того, ulimit -m` делает то, что вы хотите? sds 9 лет назад 1

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

3
Matías Moreno

Вместо этого используйте ulimit -v.

Объяснение:

Текущие реализации libc изменяют размер сегмента данных только для небольших malloc, большие malloc используют анонимный mmap (), поэтому единственный способ действительно ограничить программу - ограничить виртуальную память (ключ -v).

Надеюсь это поможет.

PS: я знаю, что этот вопрос очень старый, но не смог найти решение с Google, поэтому решил все равно ответить.