为什么服务器没有响应?

为什么服务器没有响应?

我们的服务器偶尔会拒绝提供简单的 HTML 页面。

这是在请求数量相对较高时发生的。但是,处理器负载不高,并且有大量可用内存。平均每 50 个请求中似乎会出现 1 个错误,具体取决于服务器负载。

我需要找到问题的根源并采取适当的措施来消除它。

我怀疑问题根源是大量传入的网络数据包。平均每秒有 5000 个数据包。流量 - 2 MBits/秒 这可能是导致错误的原因吗?

有趣的是,如果服务器没有响应,Apache 不会将请求字符串记录到 access.log 中。

该错误在多台客户端计算机上重复出现。DNS 不受影响,因为我通过 IP 访问了服务器。

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

---- 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
--------

主办方:SuperbHosting

操作系统:Ubuntu

服务器参数:E6300 CONROE 1.86GHZ 2 X 1MB CACHE 1066 1GB DDR2 667MHZ

这是我们使用的 apache 配置文件的链接http://repkin5.snow.prohosting.com/apache.txt

这是超时错误后立即获取的服务器状态报告。http://repkin5.snow.prohosting.com/server-status.htm120 个子服务器中只有 10 个正在运行,因此有足够的空间来处理新的请求。

虚拟机状态统计

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0   8900 725900   8468  65684    0    0     5    18   11   33  4  3 92  1

答案1

  • 有趣的是,如果服务器没有响应,Apache 不会将请求字符串记录到 access.log 中。

这听起来像是网络问题。服务器应该记录它收到的所有请求,即使它因某种原因无法响应。您可能需要验证 Web 服务器上是否没有看到数据包丢失。

答案2

有可能您处于 TCP 连接可用内核缓冲区较少的情况。我期望从中得到一些日志记录(登录到服务器,测试直到“无响应”,然后运行dmesg并查看是否有任何适用的内容)。

要调整网络设置,这可能是一个起点

正如 Chris Nava 所说,可能值得确保您不仅仅是在网络上丢失数据包,因此请务必开始使用 ping 进行检查(遗憾的是,响应 ping 与处理 TCP 数据包完全不同)。

相关内容