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 with 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With