我想在我的测试中限制内存使用量,所以我首先测试了Process::setrlimit
的行为,这让我很困惑。这是我的代码:
require 'securerandom'
Process.setrlimit(:AS, 2 << 20) # 2MB total memory, on Mac OS X
Process.setrlimit(:RSS, 2 << 20) # 2MB resident memory, on both Mac and Linux
s = SecureRandom.hex(5 << 20) # hexadecimal string from 5MB random data
puts s.length
我的Linux笔记本电脑中没有任何交换分区,所以我认为RSS等于总内存。
我希望这个程序崩溃,但它没有。它只打印出10485760
,这是该字符串的正确长度。为什么不崩溃?如何在程序本身中正确设置内存限制?