wireshark抓包问题及学习

wireshark抓包问题及学习

【场景1】服务A请求服务B经常超过3s,报错i/o timeout,想看下是否网络波动或者负载太高。需要抓包分析。

问题1:

超时时间不定,且请求量过大,一直抓了存文件里抓包文件过大。

解决学习:

每10分钟覆盖重写文件,在确认慢请求复现后,立即停止抓包。

-i 指定监听的网络接口;
-G 指定每隔N秒就重新输出至新文件;
-W 指定输出文件的最大数量,到达后会重新覆写第 1 个文件;
-w 输出结果至文件。
sudo tcpdump -i eth0 -G 600 -W 1 -w /tmp/tcpdump.pacp
ps -ef|grep tcpdump # 获取tcpdump的进程号
kill -9 PID # 停止抓包

问题2:

在服务B的主机上抓取到包后找到对应慢请求时间段后,不知如何分析,是哪里的问题。

解决学习:

网络组同事帮忙排查,异常颜色报文中,显示Window:0,分析为窗口已满,给出了调大服务器上窗口值限制的建议。

cat /proc/sys/net/ipv4/tcp_window_scaling
cat /proc/sys/net/ipv4/tcp_rmem
cat /proc/sys/net/ipv4/wmem

参考 TCP系列32—窗口管理&流控—6、TCP zero windows和persist timer
理解触发zero window的原因和过程是:服务B所在主机的TCP端口一直接收数据,但是B应用层没有及时读取,数据一直在TCP模块中缓存,最终受限于主机接收缓存的大小,window size会变为0。
应用层面排查是因为服务B加载了太多引擎,导致一笔请求会处理很长时间,从应用层面解决是关闭无用引擎,减小处理耗时。

你可能感兴趣的:(wireshark,tcpdump,wireshark)