Linux性能优化实战 40 :网络延迟问题

18 篇文章 0 订阅

一、查看延迟情况

1. 确定网络延迟,更常用的是双向的往返通信延迟RTT(Round-Trip Time)。

2. 很多网络服务会把 ICMP 禁止掉,所以需要使用traceroutehping3 的 TCP 和 UDP 模式,来获取网络延迟。

从 hping3 的结果中,你可以看到,往返延迟 RTT 为 20.9ms。

traceroute 会在路由的每一跳发送三个包,并在收到响应后,输出往返延时。

如果无响应或者响应超时(默认 5s),就会输出一个星号。

 

二、高并发时的延迟情况查看及优化策略

1. 使用 wrk 来模拟并发100的网络情况

延迟大了很多。

2. 客户端的TCP 延迟确认

    不用每次请求都发送一个 ACK,而是先等一会儿(比如 40ms),如果这段时间内,正好有其他包需要发送,那就捎带着 ACK 一起发送过去。如果一直等不到其他包,那就超时后单独发送 ACK。

3. 服务端的Nagle 算法,是用于减少小包发送数量的一种优化算法,目的是为了提高实际带宽的利用率。

    它通过合并 TCP 小包,提高网络带宽的利用率。规定:

(1) 多个小分组合并成一个分组,一起发送

(2) 一个 TCP 连接上,最多只能有一个未被确认的分组;

(3)在收到这个分组的 ACK 前,不发送其他分组;

    它提高了带宽利用率,但是导致网络延迟加大(第二个分组必须在第一个分组完成后才能发出去)

4. 客户端的TCP 延迟确认,和 服务端的Nagle 算法 一起使用时带来的问题。

(1) 当 Sever 发送了第一个分组后,Client 需要等待 40ms 后才会回复 ACK。

(2) 没收到第一个分组的 ACK,会一直等着

(3) Client 回复 ACK后,Server 才会继续发送第二个分组。

5.  解决办法:

    服务端启用tcp_nodelay(即禁用nagle算法)

 

 

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值