のタイムアウトディレクティブのドキュメントApache では次のように述べられています:
クライアントにデータを書き込むときに、送信バッファがいっぱいの場合にパケットの確認応答を待機する時間の長さ。
しかし、TCP スタックが ACK を受信しない場合は、パケットを再送信します。では、これら 2 つはどのように相互作用するのでしょうか? Apache のタイムアウトは、接続を中止する前に再試行の全体的な制限を設定しますか?
コンテキストは、curl プルが定期的に次のエラーで失敗する状況です。
curl: (18) 転送は終了しましたが、読み取り残り XXXXXX バイトです
そして正確な理由を突き止めようとしています。
クライアントとサーバーの両方で Wireshark トレースを取ったところ、サーバー (Apache) が何らかの理由でセッションを途中で終了しているようです (ファイアウォールやその他の強制終了ではありません)。これは、頻繁にダウンロードされる 2 種類のファイルで発生しています。大きなバイナリ ファイル (100 MB 単位の mp4) と小さなテキスト ファイル (~10 KB) です。大きなファイルの場合、Apache ログ メッセージが表示されます。
指定されたタイムアウトが期限切れになりました: [クライアント:] AH01581: URI /xxxx/xxxx/xxxx/ のデータをクライアントに書き込むときにタイムアウトが発生しました
現時点での私の推測では、障害は特定の時間に集中する傾向があるため、これは単なるネットワークの輻輳であると思われますが、可能であればさらに詳しく突き止めたいと思います。
構成:
6.6 の
アパッチ2.4.16
カール 7.19.7