
限定的な状況下では、パブリック Web ページをリクエストすると、約 2 分の 100% 再現可能な遅延が発生します。
問題のページ:https://id.openjdk.java.net/console/ログイン
クライアント (curl) とサーバー (apache) のログをつなぎ合わせると、典型的なやり取りは次のようになります。
[client] 15:42:03.694959 => Send header, 96 bytes (0x60) 0000: GET /console/login HTTP/1.1
<DELAY HERE>
[server] [24/Feb/2015:22:44:26 +0000] "GET /console/login HTTP/1.1"
[client] 15:44:25.984150 <= Recv header, 17 bytes (0x11) 0000: HTTP/1.1 200 OK
(時間はタイムゾーンによって異なり、秒数は時計の同期がずれているため若干ずれる場合があります。)
重要なこと:
- クライアントは自宅の ISP 経由で接続されており、特定のサブネット内のパブリック IP アドレスが割り当てられています。別の範囲の静的 IP アドレスを割り当てると、問題は解決します。
- このサーバーの「/console/login」ページが要求されます。「console/forgotPassword」を要求しても遅延はありません。他のサーバーで同様の遅延は発生していません。
(明らかに)関係のないもの:
- ホーム ネットワーク。クライアントが ISP のモデムに接続する方法に関係なく、また別のモデムを試しても、問題は解決しません。
- 時間帯/混雑状況。リクエストがいつ発生しても、遅延は一定です。
- DNS。ホスト名ではなく IP アドレスを使用した場合も動作は同じです。
- HTTPS ハンドシェイク。'curl' 対話のこの部分は常に遅延なく進行し、HTTPS 経由で 'console/forgotPassword' にアクセスする場合も遅延はありません。
- クライアント構成。複数のブラウザおよびコマンド ラインの「curl」で再現可能です。複数のクライアント システムおよび OS で再現可能です。
- 画像/スクリプトなどの読み込み。追加のリソースを要求しない「curl」を使用すると遅延が発生します。
私の質問は、これに対する最も妥当な説明は何でしょうか? あるいは、これを診断するために次に何をすべきでしょうか?
サーバーの問題ですか?私が理解している限りではApache ログ形式遅延が発生しています前にサーバーは GET リクエストを受け取りますが、それがログのタイムスタンプを読み取る正しい方法であることを誰かが確認してくれるとありがたいです。もしそうなら、サーバーが httpd にリクエストを送る前に何をしているのか、あるいはタイムスタンプを取得する前に httpd が何をしているのかは私にはわかりません。
ネットワークの問題でしょうか? ここで厄介なのは、遅延がアプリケーション レベルのメッセージ コンテンツ (要求されている特定のページ) によって左右されるということです。そして、そのコンテンツは暗号化されているはずです。(小さな町の) ISP 管理者は、コンテンツ フィルタリングは行わないと言っています... とにかく、途中のノードのどこかに私の IP アドレス範囲がブラックリストか何かに入っているのではないかと思います。
答え1
私も同様の問題を抱えていましたが、これは xdebug リモート接続のタイムアウトが原因であると思われます。ページで xdebug 付きの PHP を使用している場合、それが問題の原因である可能性があります。
答え2
私の場合、ページはすぐに読み込まれます。
(これはあまり重要ではないことはわかっていますが、これが私の経験です。)
どこから接続していますか? 何らかの DDOS 防止策を講じている可能性が非常に高いです。
おそらくあなたの IP アドレスはブラックリストに登録されているか、少なくとも他のすべてよりも厳重に検査されているのでしょう。