httpダウンロード中にカールがハングします。

httpダウンロード中にカールがハングします。

CentOS 6を実行している仮想マシンがあります。このLinuxボックスでは、4つのカールダウンロードを同時に実行しています。

場合によっては、カールのダウンロードの1つが中断されます。psカールプロセスがまだ存在することを示します。そして、netstat接続されたRECV_Qが非常に長いことを示しています。

tcp   878104      0 10.161.238.20:46130         10.162.220.12:80            ESTABLISHED 

バージョンcurl7.38.0。

どんなアイデアがありますか?なぜcurl停止しますか? TCPバッファを増やすと役に立ちますか?

ベストアンサー1

大きな静的受信キューは、ソケットからデータが受信されたがカールがデータを読み取っていないことを示します。

TCPバッファを増やしても役に立ちません。

これは病的なケースです。 HTTP要求の場合、カールは要求(またはチャンクされている場合は要求)を送信し、応答を読み取るように設計されています。応答を読み取れなかった場合は、一時停止中または別の操作を実行しています。

たとえば、標準出力に応答を書き込むことがパイプ全体であるか、信頼できないネットワークファイルシステムのファイルに書き込むなどの理由でブロックされる可能性があります。

ps -o state,wchan,args -C curl

または

pgrep -x curl | xargs -IP cat /proc/P/stack

curl応答を読み取らないようにする操作の手がかりを提供できます(/proc/$pid/task/*/stackマルチスレッドアプリケーションでも機能します)。

おすすめ記事