TCP Socket带宽瓶颈排查:服务器接收带宽为何卡在110 MiB/s?
Socket接收带宽瓶颈排查:为何卡在110 MiB/s?
问题场景
- 基于Python搭建多线程客户端-服务器架构,客户端向服务器发送图片,服务器分析后返回结果
- 客户端通过FPS监控速度发现,当服务器接收带宽达到110 MiB/s后,无论新增多少客户端,带宽都无法继续提升,导致客户端响应变慢(推测是客户端因带宽不足等待Socket资源释放)
- 尝试缩小发送图片的尺寸,可支持更多客户端(说明CPU能承载更多并发客户端),但服务器接收数据量仍在110 MiB/s时遇到瓶颈
测试验证
- 用
iperf测试服务器与客户端的网络速度,结果为850-1000 Mbits/sec(多设备作为客户端),证明网络连接带宽足够,可承载更大数据量 - 尝试开启另一个监听不同端口的服务器实例,接收带宽依旧卡在110 MiB/s
- 所有测试场景下,在服务器本地运行的客户端速度比其他客户端快10倍以上,说明服务器具备处理更多请求的潜力
核心疑问
- Socket本身是否存在最大速度限制?
- 已知Python多线程受GIL(全局解释器锁)影响,是否是CPU处理入站数据的能力上限为110 MiB/s?若为该原因,为何新增服务器实例后带宽未提升?本地客户端速度更快的原因又是什么?
- 查找Socket最大带宽限制相关信息时,仅找到如何限制(降低)Socket带宽的方法,未找到解除此类上限的方案
环境信息
- 服务器CPU:Intel i7-10700
- 服务器系统:Ubuntu 18.04
- 服务器与客户端处于同一交换机的本地网络
- 服务器与客户端均运行Python 3.6.9
- CPU所有核心总使用率约50%
- 带宽通过
gnome-system-monitor工具监控 - 客户端系统:Ubuntu 18.04 和 20.04
内容的提问来源于stack exchange,提问作者Abdelhadi Abdelhadi
相关产品推荐
相关产品推荐

