Я пытаюсь проверить определенное состояние, которое произойдет, только если perl
имеет malloc
, который завершается неудачей из-за отсутствия памяти. Я бы хотел, чтобы perl
умер как можно быстрее. Я подумал, что быстрым способом будет создать несколько огромных массивов, таких как
perl -le '$ _-> [100_000_000_000] = 1 для \ (@ a, @b, @c, @d); <> '
Но мне пришлось убить его после того, как мой своп достиг 5 гигов без каких-либо признаков остановки (я на OS X 10.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 в очень маленький раздел.