【问题标题】:latency is higher in low traffic with netty使用netty的低流量延迟更高
【发布时间】:2019-03-26 18:47:16
【问题描述】:

在我们的生产环境中,出现了一个奇怪的问题:低流量时延迟更高。 然后我用 Netty4 构建 Tcp Server 和 Client 并通过一个连接发送数据。每个请求是 100kB。 qps(request per second)=1 的延迟远高于 qps=100 的延迟。 条件:

  1. 服务器和客户端之间的 PING 延迟约为 2 毫秒。
  2. 选项 TCP_NODELAY 在两边都打开。
  3. 在服务器端,它将休眠 20 毫秒 util 响应(模拟 prod 服务)。

测试结果:

  • > 当 qps = 1 时为 35ms(每个请求 100kB);

qps=1 时不同包大小的延迟

  • ping 延迟:1.66ms
  • 100kB - 39ms
  • 50kB - 32ms
  • 20kB - 27.38ms
  • 17kB - 26.15ms
  • 15kB - 25.9ms
  • 10kB - 22.62ms(可以接受)

我想找出低流量时性能不佳的原因。我想知道它是否是由某些 Tcp 选项引起的。

【问题讨论】:

  • 您的问题是什么?提问时请尽量具体一点。
  • 尝试关闭 TCP_NODELAY。 TCP_NODELAY 使设计为在 TCP 之上分层的协议的性能更差,并且仅用作非设计为与 TCP 一起使用的协议的杂物。据推测,由于您构建了 TCP 客户端和服务器,因此您的协议被设计为在 TCP 之上运行,并且不需要杂乱无章。
  • 您的问题可能是 CPU 打盹。 CPU 可能需要几毫秒才能在休息后恢复全功率。随着负载的增加,CPU 的贪睡程度可能会降低。
  • @TheChubbyPanda 我想知道为什么在低流量下延迟更高,并尽可能在低流量下获得相同的性能。
  • @DavidSchwartz 我关闭了 TCP_NODELAY,但没有效果。以及关于 CPU 打盹的任何建议?谢谢。

标签: tcp netty


【解决方案1】:

最后,我们找到了造成这种高延迟低流量问题的原因。通过对不同包大小的测试,14KB 是转折点:如果包不大于 14KB,则延迟表现如预期,但如果包大小增加到 15KB,则延迟变差。因此我们尝试将 net.ipv4.tcp_init_cwnd 从 10 更新到 100,延迟下降,因为具有多个 TCP 包的请求可以包含在同一个滑动窗口中。

【讨论】:

    猜你喜欢
    • 2022-10-24
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2020-12-23
    相关资源
    最近更新 更多