#! /bin/bash
#
# clear_ram.sh - Clear as much user-space ram as possible
# (until the OOM_killer gets us)
#
swapoff -a
mem=$(free -b | grep Mem | awk '{print $2}')
mount none -t tmpfs -o size=$mem /tmp
dd if=/dev/zero of=/tmp/zero.dat bs=1M &
echo "17" > /proc/$(pidof dd)/oomadj
while (pidof dd); do kill -USR1 $(pidof dd); done
这是一个 shell 脚本。 这段代码的作用是什么?
不是家庭作业
最佳答案
这个脚本
- 停用交换
- 获取 RAM 量(以字节为单位)
- 安装与可用 RAM 相等的 ramdisk
- 通过 dd 将零写入 ramdisk
- 尝试将
dd
进程设置为内存不足 killer 的首选进程 - 打印
dd
的进程 ID 及其当前状态(只要它保持运行)
我说“尝试”是因为它应该写入 oom_adj
而不是 oomadj
,至少对于最近的内核来说是这样,而且最大值是 15 而不是 17。
这里还有一个错误,因为它会打印所有执行dd
的PID和状态,而不仅仅是脚本中的。
正如评论所说,最终内核内存不足 killer 将杀死该进程。
我很确定这是一件愚蠢的事情。我不知道为什么您实际上需要以这种方式将内存归零。
关于linux - 这个shell脚本有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162210/