【问题标题】:How To Compute HTTP request processing time without network latency?如何在没有网络延迟的情况下计算 HTTP 请求处理时间?
【发布时间】:2013-02-18 14:43:57
【问题描述】:

由于服务器和客户端之间的地理距离,网络延迟可能会有很大差异。所以我想得到“纯”的req。无网络延迟的服务处理时间。

我想将网络延迟作为 TCP 连接时间。据我了解,这次很大程度上取决于网络。

主要思想是计算:

  • TCP 连接时间,
  • TCP 第一个数据包接收时间,
  • 获取“纯”服务时间 = TCP 第一个数据包接收(等待时间)- TCP 连接。

我将 TCP 连接除以 2,因为实际上有 2 个请求-响应(3 次握手)。

我有两个问题:

  1. 我应该计算 TCP 所有数据包的接收时间,而不是只计算第一个数据包吗?
  2. 这种方法一般可以吗?

PS:作为工具,我使用 Erlang 的 gen_tcp。我可以显示代码。

【问题讨论】:

  • 您能否在与服务器相同的局域网(甚至同一台机器)上运行客户端?那么网络延迟应该几乎可以忽略不计。
  • 在服务器上运行tcpdump 是一个选项吗?
  • 没有。我检查远程 Web 服务。
  • 我很困惑你试图分析什么。您是在尝试分析解析 HTTP 请求或 TCP 处理时间所花费的时间,还是只是通过某些应用程序服务处理请求(即 mvc 框架,这将是控制器处理)?其次,这是为了什么以及为什么需要这样做。
  • Adam,我只想获取服务处理请求时间。为了得到它,我从 HTTP-TCP 请求周期(连接-发送-处理-接收)中减去网络延迟时间。我需要这个“纯”服务请求处理时间来给服务在性能方面排名。

标签: http tcp latency


【解决方案1】:

如果有的话,我猜“纯”服务时间 = TCP 第一个数据包接收 - TCP 连接.. 你已经写了其他方式。

您的第一个问题的一个可能答案是,理想情况下,您应该通过考虑许多数据包的纯服务时间而不仅仅是第一个数据包来计算至少某种平均值。

理想情况下,它还可以有最坏情况、平均情况、最佳情况服务时间。

要回答第二个问题,我们需要您为什么只需要纯服务时间。我的意思是因为它是一个网络应用程序,网络延迟(连接时间等......)也应该包含在“响应时间”中,而不仅仅是纯粹的服务时间。这是我基于给定信息的看法。

【讨论】:

  • 谢谢!我只需要服务时间,因为客户端、服务和建议 Web 服务的应用程序之间的地理距离很大。建议基于不同的标准:可用性、延迟、成本等。因此,如果我不消除网络延迟部分,我的应用程序可能会错误地估计 Web 服务的延迟。
  • 是的,我的意思是等待时间——TCP 连接。谢谢。
【解决方案2】:

我过去在为网络性能监控供应商工作时曾研究过类似的问题。 恕我直言,在继续之前有一些问题要问:

  • 连接时间和延迟:如果您基于网络延迟指标,请注意它考虑了 3 个步骤:客户端发送 TCP/SYN,服务器以 TCP/SYN-ACK 响应,客户端以最终 ACK 响应建立 TCP 连接。这意味着 CT 相当于 1.5 RTT(往返时间)。这验证了按照您提到的帐户执行 TCP 设置过程的前两个步骤。
  • 考虑到后来的 TCP 交换:虽然这听起来像是在会话过程中不断评估网络延迟的好主意,但这变得更加棘手。原因如下: 1. 并非所有数据包都必须得到确认(RFC1122 或https://en.wikipedia.org/wiki/TCP_delayed_acknowledgment),当它发生时会产生错误的测量,因此您需要一个启发式方法来将这些从您的计算中删除。 2. 并非所有系统都将确认数据包视为高优先级任务。这意味着一些较高的值会污染您的网络延迟数据,并仅反映服务器的负载水平。

因此,如果您只使用第一个(且可靠的)测量,您可能会错过一些网络延迟变化(尤其是在使用长期 TCP 会话的应用中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多