HTTP 请求偶尔无法到达服务器。为什么?

HTTP 请求偶尔无法到达服务器。为什么?

我们在专用服务器上托管我们的 Web 服务。有时(我认为 20 次中有 1 次)服务器未收到响应。这会导致浏览器因超时错误而回退。

一个重要的细节:在这种情况下,Apache 不会记录该请求。服务器未加载,有大量可用内存和 CPU 能力剩余。

我已经使用 tcpdump 实用程序分析了问题案例。这些是 tcpdump 跟踪的“好”和“坏”会话。两个实验中的请求相同。好 - 服务器返回响应。坏 - 无响应,超时错误。

从这些数据中,您能看出问题发生的原因吗?我该如何进一步接近错误根源?

我已将我的真实 IP 地址替换为 123.45.67.890

---- Bad ----
12:23:36.366292 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:39.362394 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:45.365567 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,nop,sackOK>
--------

---- Good ----
12:27:07.632229 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620946 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620969 IP myserver.superbservers.com.www > 123.45.67.890.63914: S 2654770980:2654770980(0) ack 3581365571 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 6>
12:27:10.838747 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 1 win 4380
12:27:10.957143 IP 123.45.67.890.63914 > myserver.superbservers.com.www: P 1:213(212) ack 1 win 4380
12:27:10.957152 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 213 win 108
12:27:10.965543 IP myserver.superbservers.com.www > 123.45.67.890.63914: P 1:630(629) ack 213 win 108
12:27:10.965621 IP myserver.superbservers.com.www > 123.45.67.890.63914: F 630:630(0) ack 213 win 108
12:27:11.183540 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 631 win 4222
12:27:11.185657 IP 123.45.67.890.63914 > myserver.superbservers.com.www: F 213:213(0) ack 631 win 4222
12:27:11.185663 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 214 win 108
--------

服务详情。

这是一项天气报告服务。它用 Perl 编写,由 MySQL 支持。该脚本使用了多个模块(来自 CPAN 和我们自己的模块)。

代码相对简单。脚本从另一台服务器下载天气数据,转换数据格式并返回 XML 响应。天气数据缓存在 MyISAM DB 中。还有一个世界位置数据库 (INNODB),也可以通过脚本请求。

主机:SuperbHosting 操作系统:Ubuntu

答案1

尝试使用tcpdump或者wireshark监控网络流量。这样你至少会知道是否存在网络问题。即检查请求是否到达机器。

此外,默认情况下,大多数浏览器对同一台服务器的连接数有限制(2)。如果您的页面有一些 javascript 对象“忘记”关闭连接等,则浏览器可能从未真正发送请求。

答案2

您能仅使用 IP 地址尝试您的请求吗?如果可以,这可能有助于缩小问题范围。

所有请求是否都来自同一个有问题的位置?如果是,请尝试另一个位置,也许是星巴克的笔记本电脑或其他地方。如果这种情况发生在多个位置,使用不同的浏览器,在一个非常简单的页面上,没有 AJAX 或复杂的 Javascript,那就是有价值的信息。

如果使用 IP 地址可靠,则可能是 DNS。了解正在使用的域名可能有助于缩小范围。

答案3

我会选择 Michael Gaff,然后向托管公司投入一些资金——这些类型的流量问题很容易由于配线架故障、网卡、网卡驱动程序问题或不良布线以及其他上千种基础设施问题而发生。

我希望您已经从不同位置尝试过此操作(或从其他地方报告了同样的问题)并且无论如何都遇到了同样的问题,这样我们就可以排除您这边的问题,对吗?

我是一个硬件迷,因此,我倾向于将硬件故障视为导致奇怪的软件和网络问题以及大规模破坏的原因。

答案4

问题在于打开了大量 TCP 连接,因此偶尔会丢失新的连接。

相关内容