从我较早的答案:https ://unix.stackexchange.com/a/254976/30731
如果你有基本的 GNU 工具(head
和tail
)或 Linux 上的 BusyBox,你可以这样做来填充一定数量的空闲内存:
</dev/zero head -c BYTES | tail
# Protip: use $((1024**3*7)) to calculate 7GiB easily
</dev/zero head -c $((1024**3*7)) | tail
这是因为 tail 需要将当前行保存在内存中,以防它是最后一行。仅输出空字节且不输出换行符的/dev/zero
行将无限长,但仅限head
于BYTES
字节,因此tail
将仅使用那么多内存。要获得更精确的数量,您需要检查系统上使用了多少 RAMhead
及其tail
本身并减去它。
要快速完全用完 RAM,您可以删除限制head
部分:
tail /dev/zero
如果您还想添加一个 duration,这可以很容易地完成bash
(在 中不起作用sh
):
cat <( </dev/zero head -c BYTES) <(sleep SECONDS) | tail
这<(command)
件事似乎鲜为人知,但通常非常有用,更多信息在这里:http ://tldp.org/LDP/abs/html/process-sub.html
然后使用cat
:cat
将等待输入完成直到退出,并且通过保持其中一个管道打开,它将保持tail
活动状态。
如果您有pv
并且想要慢慢增加 RAM 使用量:
</dev/zero head -c BYTES | pv -L BYTES_PER_SEC | tail
例如:
</dev/zero head -c $((1024**3)) | pv -L $((1024**2)) | tail
将以每秒 1 兆字节的速度使用多达 1 千兆字节。作为额外的奖励,pv
将向您显示当前的使用率和到目前为止的总使用量。当然,这也可以通过以前的变体来完成:
</dev/zero head -c BYTES | pv | tail
只需插入| pv |
零件即可显示当前状态(默认情况下吞吐量和总量)。
感谢falstaff贡献了一个更简单、更广泛兼容的变体(比如 BusyBox)。