限制进程使用的资源

限制进程使用的资源

这是我第三次遇到这个问题,并且必须根据我的特定实例的具体注意事项查找如何解决该问题。因此,我想编写一个脚本来为我完成所有步骤并适用于大多数情况。

我当前的用例是在笔记本电脑上运行 AFL。正如它所说:

  • 您的 CPU 运行时会很热,需要足够的冷却。在大多数情况下,如果冷却不足或停止正常工作,CPU 速度将自动降低。也就是说,特别是在不太合适的硬件(笔记本电脑、智能手机等)上进行模糊测试时,某些东西爆炸并非完全不可能。

  • 目标程序最终可能会不稳定地占用千兆字节的内存或用垃圾文件填充磁盘空间。 AFL 试图强制执行基本的内存限制,但无法防止每一个可能的事故。最重要的是,您不应该对数据丢失风险不可接受的系统进行模糊测试。

  • 模糊测试涉及对文件系统进行数十亿次读取和写入。在现代系统上,这通常会被大量缓存,从而导致相当适度的“物理”I/O - 但有许多因素可能会改变这个方程式。您有责任监控潜在的问题;如果 I/O 非常繁重,许多 HDD 和 SSD 的使用寿命可能会缩短。

因此,我打算在 ramdisk 上以低优先级(好的 -10 或好的 10,我永远不记得)运行它(必须再次查找如何执行此操作),并进行一些额外的限制(我想使用 cpu_limit ) 。

我以前就想做这些事情,还有限制磁盘使用总量和降低网络 I/O 速度的额外目标。

我的目标是拥有一个可以运行的简单脚本,如下所示:

./pretend_its_on_a_slow_computer_so_my_computer_doesnt_lag.sh my_program with its arguments

该脚本至少应该执行以下操作:

  • 限制CPU使用
  • 限制磁盘 I/O 以延长 SSD/HDD 的使用寿命
  • 限制网络 I/O
  • 限制磁盘使用
  • 限制内存使用
  • 限制您能想到的任何其他可能损坏我的计算机的事情:)

到目前为止我已经想出了:

#!/bin/bash

mkdir -p /mnt/temp_ramdisk

mount -t tmpfs -o size=2g tmpfs /mnt/temp_ramdisk

cp -r . /mnt/temp_ramdisk

cd /mnt/temp_ramdisk

# Assumes trickle is installed to limit network i/o
nice 19 trickle "$@"

cp -r /mnt/temp_ramdisk .

umount /mnt/temp_ramdisk

rm -r /mnt/temp_ramdisk

然而,这相当笨重(尽管我想不出更好的方法将本地文件放入 ramdisk),并且缺乏对 ramdisk 外部写入或使用过多内存或过多加热 CPU 的硬限制。我还认为我可以用 cgroup 做一些事情来改进事情,但我对它们还不够熟悉。

我该如何改进才能达到我想要的效果?

相关内容