我有一个bash脚本,它有一个while循环,在每次迭代期间使用dd命令迭代32次写入1 G文件。我可以看到它最终吃掉了我所有的RAM 32 G,我的系统冻结了。但是,当我使用并行命令使用-P选项(如parallel -P 32)执行相同的操作时。这次我的内存没有用完。有人可以解释为什么会这样。
这个人正在吃掉我所有的记忆
function exhaust
{
for item in `seq 1 1 32`
do
dd if=/sample/zombie$item of=/dev/null bs=1048576 count=1024 &
done
wait
}
exhaust
但是当我执行以下操作时,它运行良好
function exhaust
{
dd if=/sample/zombie$item of=/dev/null bs=1048576 count=1024
}
seq 1 32 | parallel -P 32 exhaust
答案 0 :(得分:0)
尝试删除两个命令上的&
。 GNU Parallel
的想法是它控制并行运行的内容,而不是你。
实际上,全部您的作业会同时运行,而不是parallel
一次运行指定数量的作业。
答案 1 :(得分:0)
(这不是答案,但评论的时间太长了。)
并行命令错误。你可能意味着:
function exhaust
{
dd if=/sample/zombie$1 of=/dev/null bs=1048576 count=1024
}
export -f exhaust
seq 1 32 | parallel -P 32 exhaust
($ item => $ 1和export -f)
答案 2 :(得分:0)
感谢所有的评论和答案。我最初的问题是,当我生成多个线程时,GNU的并行是否会确保我的RAM不被消耗。答案是,即使并行,我的最终会丢失所有内存,这是dd命令,其负载超出了我的RAM大小。看起来像ext3 / ext4等文件系统没有任何内存使用检查,因此它们将占用所有内存(缓存/页面缓存)。