Какой хороший способ заставить Perl 5 быстро исчерпать память на OS X? - PullRequest
9 голосов
/ 05 сентября 2010

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

perl -le '$_->[100_000_000_000] = 1 for \(@a, @b, @c, @d); <>'

Но мне пришлось убить его после того, как мой своп ударил 5 гигабайт без признаков остановки (я на OS X10.6).

Я только что проверил его на Linux, и он довольно быстро умирает:

time perl -le '$_->[1_000_000_000] = 1 for \(@a, @b, @c, @d); <>'
Out of memory!

real    0m0.023s
user    0m0.012s
sys     0m0.008s

Так что проблема, похоже, в OS X и dynamic_pager.

Я только что попытался отключить dynamic_pager с помощью

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

и перезагрузиться, но машина просто зависает полностью.Моя следующая попытка будет изменить конфигурационный файл com.apple.dynamic_pager.plist, чтобы записать файлы vm в очень маленький раздел.

1 Ответ

5 голосов
/ 05 сентября 2010

В предыдущем вопросе " Как имитировать ошибки выделения памяти " пользователь freespace предложил использовать ulimit с тестовой учетной записью пользователя, чтобы ограничить объем памяти, который может быть использован , Это может делать то, что вы хотите, без необходимости выделять огромное количество памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...