Webサーバーの応答をテストしています。 15個のCPUと30GBのRAMを搭載したコンピュータがあります。このコンピュータで次のbashコマンドを毎秒25,000回実行するにはどうすればよいですか?
curl -Z url="mywebserver.com" --data "{JSON DATA}"
私は毎秒200回のシェルを実行するより悪いことをしました。
seq 25000 | parallel -j0 myshell
答え1
単一のGNU並列ジョブ実行によるCPUオーバーヘッドは約1〜10ミリ秒です。これは部分的にPerlで書かれているからですが、ほとんどは後ろから行われている広範なセキュリティテストによるものです。
したがって、GNU Parallelを使用して1秒あたり平均25000のタスクを実行するには、次のようにします。
seq 1000000 | parallel -n100 --pipe --round-robin -I ,, parallel myjob {}
これを行うには約250個のコアが必要です。
(parallel
外部から呼び出すときに代替文字列を置き換える必要があるparallel
状況が発生します。orを外部で使用すると、慣れているように内部で使用できます。)parallel
-I dummy
-I ,,
parallel
{}
parallel
重要な要約:GNU Parallelは、ランタイムが重要な非常に短い作業には適していません。
xargs
ここに適切ないくつかのセキュリティテストがあります。
myjob() {
curl -Z url="mywebserver.com" --data "{JSON DATA}"
}
export -f myjob
seq 25000 | parallel --pipe --block 100 --roundrobin xargs -n1 -P0 bash -c myjob >/dev/null
私の48コアサーバーでの実行時間は2.6秒でした。したがって、必要な1秒にまだ達していません。