请求慢的原因很多,当出现前端反应接口慢时,而通过后端日志查看请求处理时间并不慢时,往往会手足无措,当面对网络问题出现手足无措时,这就是在提醒你该抓包分析了,那么一般如何根据抓包文件去分析慢请求呢,今天我们就来看看。
抓包文件分析
准备用我在测试环境抓到的包去进行分析,首先执行抓包命令。
sudo tcpdump -i lo port 6310 -w http.pcap
-w 命令能让我在服务器上抓到的包保留到 http.pcap 文件里,然后我将这个文件从服务器上dump下来,用wireshark去进行分析。
tcp delta time
首先来看看对于tcp 包和延迟相关的属性。
follow 一个tcp 流
有关tcp time的时间信息在协议的传输层,点击查看可以发现有两个列,分别是
[Time since first frame in this TCP stream: 0.036151000 seconds]
[Time since previous frame in this TCP stream: 0.032279000 seconds]
Time since first frame 代表在该tcp流中,这个tcp包距离第一个tcp包相隔多少时间。
Time since previous frame 代表这个tcp包距离上一个tcp包相隔多少时间。
我们还可以将Time since previous frame 设置为自定义列,然后按这个时间排序就可以找出从传输层的角度延迟比较大的包了。
操作如下:
因为默认wireshark会解析http协议,这不便于我们单独的查看传输层的tcp包,所以把http协议的解析先关闭下。
接着将Time since previous frame 设置为自定义列,并对其进行排序
这样便可以找出是哪个tcp包延迟过大,进而可以针对它做具体的分析。
http time
除了在传输层的针对tcp的延迟分析,同样可以针对应用层做延迟分析,通过http.time 可以得到慢http请求信息。
这样便能在抓包文件中一下定位到慢http请求,我们甚至可以保存这个过滤器,以便下次抓不同包的时候能直接应用上这个过滤器,像下面这样操作
bad Tcp
无论是http time 还是tcp delta time 都是发现延迟的利器,但要弄清楚究竟为什么发生延迟,还需要从tcp的行为去分析原因。
在wireshark中异常的数据包可以通过tcp.analysis.flags 过滤器去筛选出来。
它可以筛选出异常的tcp数据包,比如重传,duplicated Ack ,找到异常数据包以后便可以快速的根据异常包的上下文去分析异常的原因了。
总结
🔥🔥性能优化,服务监控方面的知识往往涉及量广且比较零散,我会持续输出这方面的内容,将这部分知识整理成册,愿以后性能排查不再抓瞎。