web-dev-qa-db-ja.com

「HTTPリクエストが送信され、応答を待っています」をデバッグする方法は?

ADSL接続にLinuxサーバーがあり、たまに

Connecting to example.com|xxx.xxx.xxx.122|:80... connected.
HTTP request sent, awaiting response...

wgetを使用する場合、またはFirefoxのようなブラウザ。

wgetの場合はCTRL-Cを押してからもう一度「問題を解決」して、Firefoxの場合はページをリロードするとページが読み込まれます。

それが起こるとき、それはランダムであるように継ぎ合わせます。 DNSをGoogleのDNSに変更しようとしましたが、それでも同じ問題が発生します。

質問

そのようなものをどのようにデバッグすれば、問題の原因またはおそらくパターンを見つけることができますか?

7
Sandra

HTTPステータスコードが返す内容を確認するために待ったことがありますか?

このケースをデバッグするには、2つのターミナルを開きます。最初のターミナルで、サーバーにSSHで接続して次のように入力します。

# tcpdump -vv -s0 tcp port 80 -w /tmp/example.pcap

(ジャンクリクエストをフィルタリングするためにand src Host <client_IP>を追加することもできます)

2つ目では、wgetを使用してWebサイトを閲覧し、この問題を再現して最初のターミナルに切り替えて、 Ctrl+C

この.pcapファイルをクライアントにコピーし、Wiresharkで開いて何が起こるかを確認します。

7
quanta

あなたが見るなら:

HTTP request sent, awaiting response...

これは、DNSが正常に機能し、TCP接続が確立された状態で、要求が送信されたことを意味します。問題の原因は、ビジー状態になっている可能性があるリモートサーバーにあると思います。

@quantaが言ったように、ネットワークキャプチャはより良い詳細を提供します。 Wiresharkでは、フォローTCPストリームを使用してHTTP会話を確認します。ICMPメッセージにも注意してください。

1

Apacheサーバーを再起動します。これで問題が解決するはずです。

0
Abhishek Goel

新しくプロビジョニングされた AWSインスタンスで非常に類似した問題がありました:

apt installは失敗し、一部のパッケージを取得できなかったと主張します。 wgetを使用して手動でパッケージをフェッチしようとすると、ときどきハングし、すぐに成功することがあります(ハングした後)。

サーバーを再起動しても解決しませんでした。次に、インスタンスを終了して再プロビジョニングしましたが、その後、新しいインスタンスに問題はありませんでした。

図を行きます。

0
Zoltán