我的Web服务服务器有时不会收到正确的HTTP请求,并返回“500 – 内部服务器错误”。 在服务器上使用tcpdump
和Wireshark,我发现HTTP请求被分成2个TCP数据包,有时服务器会在第二个数据包到达之前尝试处理请求。
这Wirehark捕获已被采取在服务器端。
所以我看到的是:
54.659
处54.659
71.168
99.869
(即第一个45秒之后) 99.865
,服务器类超时,并试图处理一个不完整的请求(这给了一个500错误) 我不知道现在在哪里看。 我会说,这是一个networking问题,但我有几个TCPstream,服务器试图处理请求几毫秒之前,它是完全接收。 另一方面,需要45秒以上的TCP paquets意味着networking非常糟糕。
你有什么关于如何调查更多的指针?
我不知道现在在哪里看
无处。 认真。
发生。
帽子是第一个45秒后
这是胡格。 认真。 欧洲到美国的互联网延迟大约是150ms。 你是那么多的30倍 – 这是一个没有重发的下降。 可悲的是,除非你控制双方(!)你不能控制客户的行为。 像这样的东西发生。
如果这是你的局域网 – 这是非常糟糕的。 这就是互联网,就是这样。 主要的问题是它有多糟糕 – 如果是“数以千计的某些连接”,则可能是另一端严重的networking问题。 如果这种情况发生在几乎每个人身上,那么它就更接近你(连接,数据中心等)。 例如,昨天我们遇到了这样的情况 – 一些愚蠢的DDOS是我的一个链接。 严重的拥塞可能导致数据包几乎不可能通过。 但是,如果那不是你,那你什么都做不了。
这就像是有人迟到会议,告诉你他有严重的交通堵塞。 除非果酱在你的街上,否则你不知道。 互联网有时候可能会很糟糕。
转播可能是线索。 客户端没有收到服务器为该数据包发送的ACK。 在转储开始时,服务器也从同一个源端口获得了两个SYN。
那里的IP地址都是本地的,所以我猜这不是通过互联网。 你有访问客户端吗?
尝试在客户端和服务器上同时执行相同的数据包跟踪。 我希望你会看到什么是发送和接收到大的差异。
然后追踪电缆。 你有延迟和数据包丢失这么大,我会寻找一个气隙,当电压boost到足够高的电压跳过,或剥去一个生锈的连接和水滴上的Cat-5电缆。
更换networking部件(设备,端口和电缆),直到问题消失。
您是否尝试过指定您的响应的caching能力来禁止中间设备进行caching?
caching控制:无caching
要么
caching控制:私有
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9