What is a good way to force Perl 5 to run out of memory quickly on OS X?
I am trying to test a specific condition the will only occur if perl
has a malloc
that fails due to there being no memory left. I would like perl
to die as quickly as possible. I figured the fasted way would be create some huge arrays like
perl -le '$_->[100_000_000_000] = 1 for \(@a, @b, @c, @d); <>'
But I had to kill it after my swap hit 5 gig w开发者_运维技巧ith no signs of stopping (I am on OS X 10.6).
I just tested it on Linux and it dies pretty quick:
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
So the problem seems to be OS X and its dynamic_pager
.
I just tried disabling the dynamic_pager
with
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
and rebooting, but the machine just hangs completely. My next attempt will be to change the com.apple.dynamic_pager.plist
config file to write the vm files to a very small partition.
In a previous question "How to simulate memory allocation errors", user freespace suggested using ulimit
with a test user account to limit the amount of memory that could be used. This may do what you want without having to allocate huge amounts of memory.
精彩评论