![延迟较高,但 ping 显示延迟较低](https://linux22.com/image/570747/%E5%BB%B6%E8%BF%9F%E8%BE%83%E9%AB%98%EF%BC%8C%E4%BD%86%20ping%20%E6%98%BE%E7%A4%BA%E5%BB%B6%E8%BF%9F%E8%BE%83%E4%BD%8E.png)
我们发现,访问同一子网内的远程资源的服务延迟约为 100-300 毫秒,但当我们使用 ping 时(ping 大小与正常发送的数据包大小相似),我们看到响应时间为 5 毫秒或更短。我们还应该检查什么?
答案1
“延迟”是什么意思?
您是否在比较 ICMP 回显响应时间与应用程序处理往返时间?
如果你是,那就可以解释它了 - 同时也告诉你不要比较苹果和橘子:)
答案2
是否存在数据包丢失(从而导致重新传输)的情况,例如较大的数据包?
ping -s 1400 address
也许可以在 Linux 或ping -l 1400 address
Windows 下尝试。
如果这没有帮助,请尝试使用wireshark- 也许存在一些奇怪的重新传输或损坏的数据包?
答案3
此类差异通常表明应用程序/服务器存在问题。虽然您的 ping 可能因 QoS/网络优先级而不同,但如果您谈论的是同一本地网络上的系统,那不是我首先要查看的地方。
从提供服务的同一台主机访问服务的延迟时间是多少?该主机是否能更快地提供其他服务?它的 I/O 负载是否很重?
答案4
正如您在此处所怀疑的,ping 延迟 != TCP 往返时间,尤其是在传输数据的情况下。所有这一切都可能是由于延迟的 ACK(可能造成 ~200ms,这是常见的默认设置)或 Nagle/和 DACK 之间的不良交互导致延迟增加到 ~500ms。这里需要进行数据包捕获。
还请注意,延迟确认计时器独立于 TCP 流,并在系统启动时实例化。因此它可以在流内 1-200 毫秒内随时触发,并且通常会导致您描述的“范围”式延迟。