我有一台使用 ADSL 连接的 Linux 服务器,我刚刚注意到有时我会
Connecting to example.com|xxx.xxx.xxx.122|:80... connected.
HTTP request sent, awaiting response...
当我使用wget
或例如像 Firefox 这样的浏览器时。
在按下 CTRL-C 然后重试的情况下wget
“解决问题”,而在 Firefox 的情况下,重新加载页面也会使页面加载。
这种情况似乎是随机发生的。我尝试将 DNS 更改为 Google 的 DNS,但仍然遇到同样的问题。
问题
我该如何调试类似的东西,以便找到问题的根源或者模式?
答案1
您是否曾尝试过等待查看返回的 HTTP 状态代码?
为了调试这种情况,请打开 2 个终端:第一个终端,通过 ssh 连接到您的服务器并输入:
# tcpdump -vv -s0 tcp port 80 -w /tmp/example.pcap
(您也可以附加and src host <client_IP>
以过滤垃圾请求)
在第二个终端中,使用wget
浏览您的网站,重现此问题并切换到第一个终端并按Ctrl+ C。
将此.pcap
文件复制到客户端并用 Wireshark 打开,看看会发生什么。
答案2
如果你看到:
HTTP request sent, awaiting response...
这意味着 DNS 工作正常,TCP 连接处于建立状态并且请求已发送。我认为导致您遇到问题的原因是远程服务器可能很忙。
正如 @quanta 所说,网络捕获将为您提供更好的详细信息。在 Wireshark 中,只需使用“跟踪 TCP 流”即可查看 HTTP 对话。还要注意 ICMP 消息。
答案3
重新启动 Apache 服务器。这应该可以解决问题。
答案4
我遇到了非常类似的问题新配置AWS 实例:
apt install
会失败,声称无法获取某些包。当我尝试使用 手动获取包时wget
,它有时会无限期挂起,有时会立即成功(在它无限期挂起之后)。
重启服务器没有帮助。然后我终止并重新配置了实例,之后新实例上就没再出现问题了。
去搞清楚。