2017-04-21 30 views
0

私はいくつかの「カール」アクションを実行するスクリプトbashを実行しました。スクリプトを使って同じcurlコマンドを実行するか、コンソールで直接同じcurlコマンドを実行すると大きな違いがあることに気付きました。bashスクリプトとコンソール間のコマンド実行時間の差 - スクリプトのエラー?

execution time for curl through bash script: 56 sec 
execution time for curl directly from console (same command): 1 sec 

スクリプトにエラーがありますか(コマンドの書き方など)? は、ここに私のbashスクリプト:

NUM_USER=0 
NUM_RUNS=0 

while [ $NUM_RUNS -le 0 ] 
do 
    while [ $NUM_USER -le 2 ] 
    do 
     sleep 0.5 
     start_time=`date +%s` 
     curl --proxy http://10.0.20.89:8080 --proxy-negotiate http://10.0.3.50 -u : --negotiate > /dev/null 2>&1 
     end_time=`date +%s` 
     echo execution time was `expr $end_time - $start_time` s 
     NUM_USER=`expr $NUM_USER + 1` 
     sleep 30 
    done 
    NUM_RUNS=`expr $NUM_RUNS + 1` 
done 
+0

このような違いを説明できる唯一のものは、Web要求であり、ネットワーク上で交換される内容に違いがあります。最初に行うべきことは、curlの出力を廃棄する代わりにログに記録し、出力をポストすることです。環境変数が二つのコンテキスト、特に 'PATH'、' LD_LIBRARY_PATH'などで同じであることを確認してください。あなたのスクリプトがbashで実行されていることを確認してください(bashスクリプトは '#!/ bin/bash' – Gilles

+0

ここにそれを書いているのを忘れていましたが、スクリプトは行#!/で始まりますが、これは#!/ usr/bin/env bashのようなものです。 bin/bash出力はコンソールまたはスクリプトと同じです。結果を出さずに処理を高速化するために出力リダイレクトを追加しました – user3472065

+0

tcpdumpを使用して要求を確認することもできます。 –

答えて

0

は、いずれの場合も、パケットのtcpdumpのをやって答えを見つけました。 要約すると、スクリプトを使用すると、アドレスを解決するためにdnsが実行されます(不要)。これにより遅延が発生します。コンソールを介して直接これらのDNS要求は存在しません。 最後に、コマンドの結果は同じです。

関連する問題