如何使用bash脚本生成内存不足

如何使用bash脚本生成内存不足,bash,shell,esxi,Bash,Shell,Esxi,我需要编写一个bash脚本,该脚本将消耗ESXi的最大RAM,并可能导致内存不足 我已经检查并尝试运行给定的脚本好几次,这样我可以消耗超过T 500Mb的RAM 但是我得到了一个“sh:内存不足”错误(当然),我想知道是否有可能配置分配给shell的内存量 注1:另一个要求是,我不能输入VM或运行贪婪任务 注2:我试图编写脚本,创建贪婪的、具有巨大RAM的新VM,但是我无法达到ESXi状态,因为那里内存不足 注3:我不能使用C编译器,我只有非常有限的python库 提前感谢您的帮助:)Bas

我需要编写一个bash脚本,该脚本将消耗ESXi的最大RAM,并可能导致内存不足

我已经检查并尝试运行给定的脚本好几次,这样我可以消耗超过T 500Mb的RAM

但是我得到了一个“sh:内存不足”错误(当然),我想知道是否有可能配置分配给shell的内存量

  • 注1:另一个要求是,我不能输入VM或运行贪婪任务
  • 注2:我试图编写脚本,创建贪婪的、具有巨大RAM的新VM,但是我无法达到ESXi状态,因为那里内存不足
  • 注3:我不能使用C编译器,我只有非常有限的python库

提前感谢您的帮助:)

Bash有
ulimit
命令,可用于设置Bash进程及其启动的进程可能使用的虚拟内存大小

有两个限制,硬限制和软限制。您可以降低这两个限制,但只能将软限制提高到硬限制。
ulimit-S-v unlimited
将虚拟内存大小设置为unlimited(如果硬限制允许)。
如果设置了硬限制(请参见
ulimit-H-v
),请检查任何初始化脚本中设置该限制的行。

我先前的回答:

如果您在Linux上有基本的GNU工具(
head
tail
)或BusyBox,您可以这样做来填充一定量的可用内存:

</dev/zero head -c BYTES | tail

# Protip: use $((1024**3*7)) to calculate 7GiB easily
</dev/zero head -c $((1024**3*7)) | tail
</dev/zero head -c BYTES | pv -L BYTES_PER_SEC | tail
如果您还想添加持续时间,可以在
bash
中轻松完成(在
sh
中不起作用):

例如:

</dev/zero head -c $((1024**3)) | pv -L $((1024**2)) | tail
只需插入
|pv |
部分,即可显示当前状态(默认情况下吞吐量和总量)


感谢您贡献了一个更简单、更广泛兼容的变体(如BusyBox)


制作一个ramdisk()并用一个大文件填充它。不幸的是,我在我的ESXi服务器上没有“mount”命令。ESXi不是基于我可以修改的内核的。如果fork-bomb有效,那么最好的解决方案是启动大量进程并禁用交换(如果有)。要了解它是否有效:
:(){:|:&};:但仅当您准备在测试后关闭服务器时才执行此操作!!我不能直接在我的服务器上启动一个fork炸弹,ESXi阻止它。这似乎不适用于busybox grep。我找到了这个解决方案,但它只会消耗未绑定的内存(这正是我所寻找的)
tail/dev/zero
@falstaff也适用于使用GNU工具的Debian。看来你的解决方案更通用,很好的发现!你介意我把你的解决方案并入我的答案吗?
</dev/zero head -c BYTES | pv -L BYTES_PER_SEC | tail
</dev/zero head -c $((1024**3)) | pv -L $((1024**2)) | tail
</dev/zero head -c BYTES | pv | tail