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に変更しようとしましたが、それでも同じ問題が発生します。
質問
そのようなものをどのようにデバッグすれば、問題の原因またはおそらくパターンを見つけることができますか?
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で開いて何が起こるかを確認します。
あなたが見るなら:
HTTP request sent, awaiting response...
これは、DNSが正常に機能し、TCP接続が確立された状態で、要求が送信されたことを意味します。問題の原因は、ビジー状態になっている可能性があるリモートサーバーにあると思います。
@quantaが言ったように、ネットワークキャプチャはより良い詳細を提供します。 Wiresharkでは、フォローTCPストリームを使用してHTTP会話を確認します。ICMPメッセージにも注意してください。
Apacheサーバーを再起動します。これで問題が解決するはずです。
新しくプロビジョニングされた AWSインスタンスで非常に類似した問題がありました:
apt install
は失敗し、一部のパッケージを取得できなかったと主張します。 wget
を使用して手動でパッケージをフェッチしようとすると、ときどきハングし、すぐに成功することがあります(ハングした後)。
サーバーを再起動しても解決しませんでした。次に、インスタンスを終了して再プロビジョニングしましたが、その後、新しいインスタンスに問題はありませんでした。
図を行きます。