次のことに基づいて、HTTP経由でファイルをダウンロードしようとすると、なぜ大量の「ハング」が発生する可能性があるのかについての考えはありますか?
この時点で、これらのエラーをスローしているサーバーに何かファンキーなものがあるか、これは単なる通常のネットワーク動作であり、障害に対してより回復力のあるクライアントを使用(または書き込み)する必要があるようです。
何かご意見は?
おそらくあなたの問題は、返信コメントで推測したように、ISPとの低レベルのネットワークの問題でした。 IISで、ログファイルに不思議な200 0 64行が表示されるという同様の問題が発生しています。これが、この投稿を見つけた方法です。記録として、これはsc-win32についての私の理解です。 -status = 64;私が間違っている場合、誰かが私を訂正してくれることを願っています。
私はこの問題を調査するために2週間を費やしました。私にとっては、断続的なランダムリクエストが途中で終了するというシナリオがありました。これにより、IISログのステータスコードは200ですが、win32-statusは64になります。
私たちのインフラストラクチャには、HAモードの2つのNetScalerロードバランサーの背後にある2つのWindows IISサーバーが含まれています。
私の特定のケースでは、問題は、NetScalerで「統合キャッシュ」と呼ばれる機能がオンになっていることでした( http://support.citrix.com/proddocs/topic/ns-optimization-10-5-map/ ns-IC-gen-wrapper-10-con.html )。
この機能を無効にした後、リクエストの中断は停止しました。そして、サイトは正常に動作しました。これがどのように、またはなぜ問題を引き起こしたのかはわかりませんが、問題はあります。
プロキシまたはロードバランサーを使用している場合は、それらがオンになっている機能を調査してください。私にとっての原因は、クライアントとサーバーの間でリクエストが中断されたことでした。
この説明が少なくとも他の誰かの時間を節約することを願っています。
これに3日を費やしました。 4秒に設定されたのはタイムアウトでした(curl phpリクエスト)。解決策は、タイムアウト設定を増やすことでした。
//curl_setopt($ch, CURLOPT_TIMEOUT, 4); // times out after 4s
curl_setopt($ch, CURLOPT_TIMEOUT, 60); // times out after 60s
サーバーとダウンロードクライアントの間に Fiddler を配置することをお勧めします。これにより、Firefoxと他のcientsの違いが明らかになるはずです。
この問題に関するより多くのデータを収集するには、ワイヤーシェアまたはネットワークモニターを使用する必要があります。私は思います。
サーバーからのヘッダー、特にcontent-typeとcontent-lengthを確認してください。クライアントがバイナリファイルの形式を認識せず、決して来ないバイトを待っている間にハングするか、基になるTCP接続。これにより、IISがwin32ステータス64をログに記録する可能性があります。