开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜