
在有限的情況下,當我請求公共網頁時,我會得到大約 2 分鐘的 100% 可重現延遲。
有問題的頁面:https://id.openjdk.java.net/console/login
將客戶端(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 的數據機以及嘗試不同的數據機,問題仍然存在。
- 一天中的時間/擁擠。無論請求何時發生,延遲都是一致的。
- 域名系統。如果我使用 IP 位址而不是主機名,行為是相同的。
- HTTPS 握手。 「curl」互動的這一部分總是毫不延遲地進行;透過 HTTPS 存取「console/forgotPassword」時沒有延遲。
- 客戶端配置。可在多個瀏覽器中並透過命令列上的「curl」重現。可在多個客戶端系統和作業系統上重現。
- 圖像/腳本/等。載入中.使用“curl”時會出現延遲,它不需要額外的資源。
我的問題:對此最合理的解釋是什麼?或者:接下來我該做什麼來診斷它?
伺服器問題?據我了解Apache 日誌格式,發生延遲前伺服器收到 GET 請求,但如果有人可以確認這是讀取日誌時間戳記的正確方法,我將不勝感激。如果是這樣,我不清楚伺服器在向 httpd 發出請求之前可能會做什麼(如果有的話),或者 httpd 在獲取時間戳之前可能會做什麼。
網路問題?這裡棘手的部分是,延遲顯然取決於應用程式層級訊息內容:所要求的特定頁面。這應該被加密。 (小鎮)ISP 管理員說他們不執行內容過濾...無論如何,我想知道沿途的某個節點是否將我的 IP 位址範圍列入黑名單或其他內容。
答案1
我遇到了類似的問題,這似乎是由 xdebug 遠端連線逾時引起的。如果您的頁面使用帶有 xdebug 的 php,則可能會導致您的問題。
答案2
對我來說,頁面會立即載入。
(我知道,這並不重要,但這是我的經驗。)
您從哪裡連接?您很可能遇到了某種 DDOS 防禦。
也許您的 IP 位址已被列入黑名單,或至少比其他所有位址都經過更仔細的檢查。