前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[linux][tcp]使用tcprtt排查网络延迟问题

[linux][tcp]使用tcprtt排查网络延迟问题

作者头像
皮振伟
发布2020-09-23 11:53:45
2.7K0
发布2020-09-23 11:53:45
举报
文章被收录于专栏:皮振伟的专栏皮振伟的专栏

前言 网络后端业务,经常会遇到延迟抖动的问题。那么问题来了,如何排除出来是网络的问题呢,还是业务的逻辑问题呢,或者是其他的调度问题呢? 分析 SRTT 在TCP的连接中,有一个指标叫做SRTT(smoothed round trip time),关于SRTT的计算方法,可以参考linux/net/ipv4/tcp_probe.c,具体的计算逻辑可以参考代码,以及注释中的论文,不在这里展开(主要是作者看不懂)。 所以,能够dump出来的TCP连接的srtt,生成柱状图观察出来延迟的区间变化,我们就可以知道网络连接的srtt是否抖动。如果业务延迟发生了抖动,srtt很稳定,就可以说明大概率不是网络的问题,可能是业务的问题,或者调度的问题等等; 反之,如果srtt页发生了抖动,那么可以先检查一下网络连接。 和tcp probe的关系 tcp probe是内核提供的debug模块,也可以完成类似的功能,不过在高版本的内核上,已经移除掉了。 从原理上来看,都是基于kprobe原理,hook住tcp_rcv_established函数,来dump出来必要的数据。 但是,在使用性上没有bcc方便。需要说明的是,基于kprobe原理的工具都有overhead,在特别频繁调用到的路径上,需要谨慎使用。 tcprtt使用方法和例子

升级bcc到最新的版本,tools里面支持了tcprtt工具。

tcprtt [-h] [-i INTERVAL] [-d DURATION] [-T] [-m] [-p SPORT] [-P DPORT] [-a SADDR] [-A DADDR] [-D] 可以通过参数过滤预期的流。在man page中有详细说明。 下面是example中的例子: wrk压测一个web服务器,输出的结果: # wrk -d 30 -c 10 --latency http://192.168.122.100/index.html Running 30s test @ http://192.168.122.100/index.html 2 threads and 10 connections Thread Stats Avg Stdev Max +/- Stdev Latency 86.75ms 153.76ms 1.54s 90.85% Req/Sec 160.91 76.07 424.00 67.06% Latency Distribution 50% 14.55ms 75% 119.21ms 90% 230.22ms 99% 726.90ms 9523 requests in 30.02s, 69.62MB read Socket errors: connect 0, read 0, write 0, timeout 1 可以看到PCT 99非常不稳定,Avg延迟和Max延迟相差也比较多。 在运行期间,同时抓取tcprtt数据:

可以看到RTT不稳定,延迟以4-7ms居多,最大可以到达512 -> 1023ms。所以,可以简单判断出来网络环境不好,需要先排查网络环境。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AlwaysGeek 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档