Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is a good way to force Perl 5 to run out of memory quickly on OS X?

Tags:

memory

macos

perl

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.

like image 446
Chas. Owens Avatar asked Sep 05 '10 00:09

Chas. Owens


1 Answers

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.

like image 169
bobbymcr Avatar answered Oct 13 '22 08:10

bobbymcr