Wireshark TS | MQ 传输缓慢问题
问题背景
应用传输慢是一种比较常见的问题,慢在哪,为什么慢,有时候光从网络数据包分析方面很难回答的一清二楚,毕竟不同的技术方向专业性太强,全栈大佬只能仰望,而我们能做到的是在专注于自身的专业方向之外,尽量扩展知识面,学会找出问题的规律,并提出可能的解决建议。
就像本次 MQ 案例一样,说实话我对 MQ 一无所知,但并不会让我们在拿到相关数据包跟踪文件后无从下手,总还是有解题思路,并能找到一定规律的。
案例取自 SharkFest 2010《Wireshark in the Large Enterprise》
问题信息
跟踪文件基本信息如下:
λ capinfos B2BXfer.pcap
File name: B2BXfer.pcap
File type: Wireshark/tcpdump/... - pcap
File encapsulation: Ethernet
File timestamp precision: microseconds (6)
Packet size limit: file hdr: 8192 bytes
Packet size limit: inferred: 55 bytes
Number of packets: 810
File size: 57 kB
Data size: 702 kB
Capture duration: 162.247000 seconds
First packet time: 2007-09-26 17:16:57.337002
Last packet time: 2007-09-26 17:19:39.584002
Data byte rate: 4332 bytes/s
Data bit rate: 34 kbps
Average packet size: 867.85 bytes
Average packet rate: 4 packets/s
SHA256: dfbebcc56cd4a5ccfa42ed455daaa8e3ad4e21bcf91be01f5069afbb5271ee15
RIPEMD160: aac286e82a30280f229055b711810f9c27809305
SHA1: 0d23af488435de254906ad7be75485d0ad8101e9
Strict time order: True
Number of interfaces in file: 1
Interface #0 info:Encapsulation = Ethernet (1 - ether)Capture length = 8192Time precision = microseconds (6)Time ticks per second = 1000000Number of stat entries = 0Number of packets = 810
跟踪文件在 linux 上通过 tcpdump 所捕获,数据包数量 810 个,长度截断为 55 字节,文件数据大小 702k 字节,捕获时长 162.247 秒,平均速率 34k bps。
专家信息如下,可以看到异常的简洁,没有 Warning 相关信息,可见传输缓慢的问题并不是常见的丢包导致重传所引起。

问题分析
展开数据包跟踪文件实际信息如下:

首先是 TCP 三次握手,IRTT 约0.099s,另通过 TTL 64 可知,捕获点在服务器端上或者靠近服务器端的地方。

由于数据包文件截断为 55 字节的原因,所以像是 TCP SYN 数据包中的 TCP Options 字段实际仅有 1 字节显示,这也是每个数据包会显示 [Packet size limited during capture] 的原因。而这样的设置其实也可大致判断,这个传输慢并非 TCP 窗口之类的问题,像是接收窗口满等。

既然说是传输缓慢,那么使用统计中的一些图形展示会更加清楚,如下所示可以看到 I/O 图,显示的传输速率在一定时间后呈现一条笔直的横线,约 35k bps,这说明整个 MQ 传输是以一个极其规律的方式来交互,慢也有慢的规律不是。。。

通过点选 I/O 图中的散点,定位到从 No.16 开始的传输规律,分析如下:
- 客户端 192.168.1.1 一次性会发送三个数据分段,长度分别为 1434、1434 和 1410,可大致判断出 MSS 为 1380(1434-54),因此是两个 MSS + 一个以 PSH 标记的数据分段(不到一个 MSS 长度);
- 服务器端 10.10.10.10 在连续收到两个 MSS 数据分段后,会立马触发出一个 ACK 确认,但在收到最后一个 PSH/ACK 的数据分段后,在有 Delayed ACK 的情况下,延迟确认约 99ms;
- 在服务器端第二个 ACK 返回至客户端后,客户端会等待约 800ms(900ms - IRTT 约 100ms)才会再次发送下一次数据分段(1434、1434 和 1410),如此不断反复。


因此在整个数据传输交互过程中,可以看出有三个规律:
- 2 MSS + 1 小于 MSS,固定发送数据规律;
- 延迟确认 99ms 规律;
- 等待 800ms 间隔发送规律。
不要小看 ms,一次传输如此,次次传输也如此,时间一长,整体的传输效率自然相当低下。通过 Delta Time 从大到小排序,接近 160 个 900+ms 延迟(总数据包才 810 个,近 20%)。

通过 TCP Trace 图,更容易看到数据包的传输规律,一图胜千言。

问题总结
总之,网络数据包分析可以清楚传输缓慢问题所在,慢在哪,至于为什么是这样的传输规律(MQ 发送),这还得回归到 MQ 应用上的专业方向。还是那句话,最后可能无法确定根因,但网络数据包分析可以为我们指明正确的方向。
相关文章:
Wireshark TS | MQ 传输缓慢问题
问题背景 应用传输慢是一种比较常见的问题,慢在哪,为什么慢,有时候光从网络数据包分析方面很难回答的一清二楚,毕竟不同的技术方向专业性太强,全栈大佬只能仰望,而我们能做到的是在专注于自身的专业方向之…...
flink集群与资源@k8s源码分析-回顾
本章是分析系列最后一章,作为回顾,以运行架构图串联起所有分析场景 1 启动集群,部署集群(提交k8s),新建作业管理器组件 2 构建和启动flink master组件 3 提交作业,N/A...
学习心得09:C++新特性
现在语言越来越复杂,关键字也越来越多。所以我提出了关键字自动加标识的想法。 这些新特性也都是有用的,一般人也用不上。在这方面,我的主张是:除非你确实需要用到新特性,否则尽量不要用。保证了代码的可维护。 C很复杂…...
前端框架vBean admin
文章目录 引言I 数据库表设计1.1 用户表1.2 角色表1.3 菜单表II 接口引言 文档:https://doc.vvbin.cn/guide/introduction.html http://doc.vvbin.cn 仓库:https://github.com/vbenjs/vue-vben-admin git clone https://github.com/vbenjs/vue-vben-admin-doc 在线体验demo:…...
云原生周刊:Grafana Beyla 发布 | 2023.9.18
开源项目推荐 Komiser Komiser 是一个与云无关的开源资源管理器。它与多个云提供商(包括 AWS、Azure、Civo、Digital Ocean、OCI、Linode、腾讯和 Scaleway)集成,构建云资产库存,并帮助您在资源层面分解成本。 kr8s 这是一个用…...
C++ std::unique_lock 用法
文章目录 1.创建 std::unique_lock 对象2.自动加锁和解锁3.延迟加锁与手动加解锁4.尝试加锁5.配合条件变量使用6.小结参考文献 std::unique_lock 是 C11 提供的一个用于管理互斥锁的类,它提供了更灵活的锁管理功能,适用于各种多线程场景。 1.创建 std::u…...
Pytorch C++ 前端第二部分:输入、权重和偏差
本教程分为两部分 第 2.1 部分 – 基础知识速成课程。第 2.2 部分 – 使用 C++ 构建神经网络如果您已经了解神经网络的基础知识,那么无需阅读 Part-2.1 的内容,理解 Part-2.2 应该没有问题。我们试图通过动画 GIF 来可视化方程,从而使其简短而有趣。但请注意,我们根据在解释…...
面试题:RocketMQ 如何保证消息不丢失,如何保证消息不被重复消费?
文章目录 1、消息整体处理过程Producer发送消息阶段手段一:提供SYNC的发送消息方式,等待broker处理结果。手段二:发送消息如果失败或者超时,则重新发送。手段三:broker提供多master模式,即使某台broker宕机…...
uniapp打包安卓后在安卓屏上实现开机自启动
实现开机自启动(使用插件) 打开插件地址安卓开机自启动 Fvv-AutoStart - DCloud 插件市场 使用方法 选择你要开启自启动的项目 在项目的manifest.json中app-plus下写入以下代码 注意需要替换 android_package_name 为自己的,不然无法进行安卓apk打包 "nativePlugins&q…...
浅谈KNX总线智能照明控制系统在北京南站房中的应用
安科瑞 华楠 摘要:本文简要介绍了i-bus EIB/KNX智能建筑控制系统的基本原理及在北京南站房中的成功应用。阐述了这一系统强大的系统功能、灵活的控制方式节能效果。 关键词:i-bus智能建筑控制;控制系统;节能 1、工程概况 北京新…...
深入了解Java的核心库
掌握Java的核心库是成为一名优秀的Java开发者的关键。Java提供了丰富的核心库和API,包括集合框架、输入输出、多线程、异常处理等等。熟悉并掌握这些库的使用,可以提高编程效率和代码质量。在本文中,我们将深入讨论Java的核心库,并…...
嵌入式:驱动开发 Day9
作业:通过platform总线驱动实现 a.应用程序通过阻塞的io模型来读取number变量的值 b.number是内核驱动中的一个变量 c.number的值随着按键按下而改变(按键中断) 例如number0 按下按键number1 ,再次按下按键number0 d.在按下按键的时候需要同时…...
【ComfyUI】安装 之 window版
文章目录 序言步骤下载comfyUI配置大模型和vae下载依赖组件启动 生成图片解决办法 序言 由于stable diffusion web ui无法做到对流程进行控制,只是点击个生成按钮后,一切都交给AI来处理。但是用于生产生活是需要精细化对各个流程都要进行控制的。 故也…...
iMazing 2 .17.9最新官方中文版免费下载安装激活
iMazing 2 .17.9最新版是一款帮助用户管理IOS手机的应用程序,iMazing2最新版能力远超iTunes提供的终极的iOS设备管理器。IMazing与你的iOS设备(iPhone、 iPad或iPod)相连,使用起来非常的方便。作为苹果指定的iOS设备同步工具。 mazing什么意思 iMazing…...
Postman应用——Pre-request Script和Test Script脚本介绍
文章目录 Pre-request Script所在位置CollectionFolderRequest Test Script所在位置CollectionFolderRequest Pre-request Script(前置脚本):可以使用在Collection、Folder和Request中,并在Request请求之前执行,可用于…...
vue2中年份季度选择器(需要安装element)
调用 <!--父组件调用--><QuarterCom v-model"quart" clearable default-current/> 组件代码 <template><div><span style"margin-right: 10px">{{ label }}</span><markstyle"position:fixed;top:0;bottom:0…...
QT day5
数据库完成登入注册 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include<QDebug> #include<QPushButton> #include<QLineEdit> #include<QLabel> #include <QMainWindow> #include<QMessageBo…...
设计模式Java实战
文章目录 一、前置1.1 目的1.2 面向对象1.3 接口和抽象类 二、七大设计原则2.1 单一职责2.2 接口隔离原则2.3 依赖倒转原则2.4 里氏替换原则2.5 开闭原则2.6 不要重复原则2.7 迪米特最少知道法则 三、23种设计模式3.1创建型:创建对象3.1.1 单例模式定义最佳实践场景…...
外国固定资产管理系统功能有哪些
很多公司都在寻找提高自己资产管理效益的方法。为了满足这一要求,国外的固定资产管理系统已经发展成多种形式。以下是国外一些常见的固定资产管理系统的特点:自动化和智能化:许多现代固定资产管理系统采用自动化和数字化技术,以简化流程,减少…...
Postman应用——控制台调试
当你在测试脚本中遇到错误或意外行为时,Postman控制台可以帮助你识别,通过将console.log调试语句与你的测试断言相结合,你可以检查http请求和响应的内容,以及变量之类的。 通常可以使用控制台日志来标记代码执行,有时…...
【限时解密】ElevenLabs未公开的“Voice Stability Index”(VSI)指标解析——专业级语音稳定性评估体系首度披露
更多请点击: https://intelliparadigm.com 第一章:【限时解密】ElevenLabs未公开的“Voice Stability Index”(VSI)指标解析——专业级语音稳定性评估体系首度披露 VSI 的本质与工程意义 Voice Stability Index(VSI&…...
揭秘AI教材生成秘诀!AI教材写作工具助力,低查重完成20万字教材!
教材编写难题与AI工具解决方案 在编写教材时,如何才能精准满足不同的需求呢?不同学段的学生在认知能力上存在显著差异,内容过于复杂或简单都不合适;而在课堂教学和自主学习等不同场景下,对教材的要求又各不相同&#…...
AI计算前沿:从存内计算到神经形态芯片的硬件革命
1. 从CES的喧嚣到AI研究的深水区:一次认知的转向每年一月的拉斯维加斯,消费电子展(CES)总是充斥着最炫目的灯光、最酷炫的 gadgets 和最大声的营销口号。作为一名长期跟踪半导体与系统设计的行业观察者,我和我的搭档—…...
告别硬编码!SAP ABAPer必学的5个POPUP函数实战用法(附完整代码)
告别硬编码!SAP ABAPer必学的5个POPUP函数实战用法(附完整代码) 在SAP ABAP开发中,交互设计往往决定了用户体验的好坏。想象一下这样的场景:用户在执行关键操作时缺乏明确确认,导致数据误删;或者…...
4. 打破ASR技术瓶颈:Whisper-1模型原理、性能与落地实践
1. 引言 语音识别(Automatic Speech Recognition, ASR)是人工智能领域的核心技术方向之一,其历史可追溯至20世纪50年代贝尔实验室的Audrey系统——这一仅能识别10个英文数字的早期系统,标志着机器理解人类语音的开端。此后半个多…...
IP核验证责任共担模型:从授权方到被授权方的实践策略
1. IP核验证的责任边界:一场持续多年的行业对话在SoC设计领域,IP核的集成与验证从来都不是一个轻松的话题。随着芯片设计复杂度的指数级增长,一个现代SoC中可能集成了数十甚至上百个来自不同供应商的IP核,从处理器、内存控制器到各…...
Claude Code与Cursor CLI集成:AI辅助编程工作流优化实践
1. 项目概述:Claude Code与Cursor CLI的桥梁如果你和我一样,日常开发中同时使用Claude Code和Cursor,并且对Composer 2的执行速度印象深刻,那么你很可能也面临过这样的困境:Claude Code在规划、分析和代码审查方面表现…...
STM32实战:手把手教你用Cubemx配置交流充电桩的CP信号检测(附代码)
STM32实战:从零构建充电桩CP信号检测系统 充电桩作为新能源汽车基础设施的核心组件,其通信协议的可靠性直接关系到充电安全。在实际工程中,CP(Control Pilot)信号的检测往往是开发者的第一个技术拦路虎。我曾在一个海外…...
暗黑破坏神2存档编辑器完整指南:快速免费修改d2s文件终极方案
暗黑破坏神2存档编辑器完整指南:快速免费修改d2s文件终极方案 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾经在暗黑破坏神2中因为技能点分配错误而懊悔?是否因为刷不到心仪的装备而浪费时间&a…...
告别ElementUI日历的默认样式!手把手教你用SCSS深度定制一个高颜值日历组件
从零打造高颜值日历组件:ElementUI Calendar深度定制指南 当你打开项目后台管理系统,那个灰扑扑的默认日历组件是否总让你皱眉?作为前端开发者,我们经常需要在不破坏原有功能的前提下,为ElementUI的Calendar组件换上符…...
