【发布时间】:2019-03-26 18:47:16
【问题描述】:
在我们的生产环境中,出现了一个奇怪的问题:低流量时延迟更高。 然后我用 Netty4 构建 Tcp Server 和 Client 并通过一个连接发送数据。每个请求是 100kB。 qps(request per second)=1 的延迟远高于 qps=100 的延迟。 条件:
- 服务器和客户端之间的 PING 延迟约为 2 毫秒。
- 选项 TCP_NODELAY 在两边都打开。
- 在服务器端,它将休眠 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 打盹的任何建议?谢谢。