GNU的并行实用程序

时间:2016-10-12 16:09:13

标签: bash parallel-processing gnu-parallel

我有一个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

3 个答案:

答案 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等文件系统没有任何内存使用检查,因此它们将占用所有内存(缓存/页面缓存)。