一段话总结全文
通过修改内核参数net.ipv4.tcp_slow_start_after_idle
为0,可以避免tcp连接qps不高的情况下,每一个请求都经历慢启动过程,从而提高网络传输速度。
服务整体耗时降低了约20ms
建议修改该参数,充分发挥 TCP 长连接的优势,提高网络传输速率
下面详细介绍一下问题发现的过程和原因
遇到的问题
长期以来有个问题,A、B两个服务,A
是B
的上游,从监控上看我们发现一个现象:站在A
的角度上看请求B
的平均耗时比站在B
的角度上看B
自身的平均耗时高出20ms左右,
例如下图,B
自身业务平均耗时30ms,但是A
请求B并收到返回结果的平均耗时却是50ms,那么中间相差的20ms哪去了呢?
从A
角度上看,比B
角度上看多统计了这几个耗时:
- IO线程与逻辑线程之间的排队时间
- 协议的序列化与反序列化
- 网络传输的时间
多出来的时间在哪呢?cpu利用率并不高,基本排除排队时间影响,序列化和反序列化的耗时可以通过在代码中打点计算,也不高,那么嫌疑最大的就是网络传输时间
了