2016-10-12 8 views
0

私はddコマンドを使って各繰り返しの間に1回のGファイルを32回書くために反復するwhileループを持つbashスクリプトを持っています。私はそれがプロセスですべての私のRAM 32 Gを食べ終わることがわかり、私のシステムはフリーズする。しかし、私はパラレルのように-Pオプションを使用してパラレルコマンドを使用して同じことをするときに - Pの32.この時間は私のメモリが使い果たされていません。これがなぜそうであるか説明できる人もいます。GNUの並列ユーティリティ

この1つは、すべて私の記憶に

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 
+1

アイデアはコードを表示することであり、私たちが見ることができないものがなぜ機能しないのかを尋ねるものではありません。 –

答えて

0

を実行します。 GNU Parallelのアイデアは、です。は、あなたと平行して実行するものを制御します。そのまま

は、すべてあなたの仕事は、一度にジョブの指定された数を実行しているparallelのではなく、同時に実行されます。

+0

&は並行して入力ミスです。それについての謝罪。しかし、私はバックグラウンドでddを実行してforループを使用して、他のものから&を削除するように私に依頼するあなたの理由を理解していません。 – Vijay

+0

また、指定されたジョブを並行して実行しているときには、すぐに理解できません。あなたは私が-P 32と言うときに、同時に32すべてを動かすつもりは言いません。 ps -efを実行すると、両方のフォームに対して32 ddコマンドが実行されているのがわかります。 – Vijay

+0

パラレルケースに$ itemが設定されていますか? –

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 

($アイテム=> $ 1、輸出-f)すべてのコメントと回答のため

0

感謝。私の最初の質問は、複数のスレッドを生成するときにGNUの並列が私のRAMが消費されないことを確認するかどうかでした。答えは並行しても、ペイロードが私のRAMサイズをオーバーシュートするddコマンドである私の場合、すべてのメモリを失うことになります。 ext3/ext4などのファイルシステムのように見えますが、メモリの使用状況をチェックしていないので、すべてのメモリ(キャッシュ/ページキャッシュ)を消費します。

関連する問題