如何使用bash脚本生成内存不足
我需要编写一个bash脚本,该脚本将消耗ESXi的最大RAM,并可能导致内存不足 我已经检查并尝试运行给定的脚本好几次,这样我可以消耗超过T 500Mb的RAM 但是我得到了一个“sh:内存不足”错误(当然),我想知道是否有可能配置分配给shell的内存量如何使用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
- 注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